【问题标题】:extract data of the column based on group numbering in R根据R中的组编号提取列的数据
【发布时间】:2020-03-30 14:11:00
【问题描述】:

我有这样的数据(它只是我整个数据的一小部分)

No  A       B       C
1   0.15    0.22    1.6099
1   0.58    0.43    3.1626
1   0.42    0.37    2.6003
1   1.63    0.72    6.3488
2   0.52    0.40    3.1054
3   0.54    0.42    3.2435
3   0.05    0.12    0.8858
3   0.15    0.22    2.2195
5   0.45    0.38    3.0482
5   0.37    0.34    2.4957
5   0.28    0.30    2.0814
5   1.45    0.68    5.6248
6   1.53    0.70    6.4968
6   0.29    0.30    2.1051
6   1.18    0.61    5.5439

我想将我的数据提取(排序)到以下两个表中:

表1:(基于“编号”列)

1        2      3        4       5      6
0.15    0.52    0.54     NA     0.37    1.53
0.58            0.05            0.28    0.29
0.42            0.15            1.45    1.18
1.63            0.45  

表2:(每三列拆分表1)

1 to 3      4 to 6
0.15        0.37
0.58        0.28
0.42        1.45
1.63        1.53
0.52        0.29
0.54        1.18
0.05    
0.15    
0.45  

我写了一些代码,但它给出了第一列(数字 1,如果我想要其他数字,我应该更改 file1$No[i]==1 的值)。你能帮我改正吗?

df210 <- read.csv("F:/Shel/file1.csv")

for (i in 1:201){
  if (file1$No[i] == 1){
    bb1 <- print(file1$circularity[i])
  }
  matrix(, ncol = 201))    
}

【问题讨论】:

    标签: r sorting split


    【解决方案1】:

    也许您可以使用split 尝试下面的代码

    t1 <- do.call(cbind,
                  lapply(u <- split(df$A,
                                    factor(df$No,levels = seq(max(df$No)))),
                         `length<-`,
                         max(lengths(u))))
    > t1
            1    2    3  4    5    6
    [1,] 0.15 0.52 0.54 NA 0.45 1.53
    [2,] 0.58   NA 0.05 NA 0.37 0.29
    [3,] 0.42   NA 0.15 NA 0.28 1.18
    [4,] 1.63   NA   NA NA 1.45   NA
    
    t2 <- do.call(cbind,
                  lapply(u <- split(df$A,
                                    ceiling(df$No/3)),
                         `length<-`,
                         max(lengths(u))))
    > t2
            1    2
    [1,] 0.15 0.45
    [2,] 0.58 0.37
    [3,] 0.42 0.28
    [4,] 1.63 1.45
    [5,] 0.52 1.53
    [6,] 0.54 0.29
    [7,] 0.05 1.18
    [8,] 0.15   NA
    

    数据

    df <- structure(list(No = c(1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 5L, 5L, 
    5L, 5L, 6L, 6L, 6L), A = c(0.15, 0.58, 0.42, 1.63, 0.52, 0.54, 
    0.05, 0.15, 0.45, 0.37, 0.28, 1.45, 1.53, 0.29, 1.18), B = c(0.22, 
    0.43, 0.37, 0.72, 0.4, 0.42, 0.12, 0.22, 0.38, 0.34, 0.3, 0.68, 
    0.7, 0.3, 0.61), C = c(1.6099, 3.1626, 2.6003, 6.3488, 3.1054, 
    3.2435, 0.8858, 2.2195, 3.0482, 2.4957, 2.0814, 5.6248, 6.4968, 
    2.1051, 5.5439)), class = "data.frame", row.names = c(NA, -15L
    ))
    

    【讨论】:

    • 非常感谢 Thomas 的热心帮助
    猜你喜欢
    • 2019-05-15
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 2021-06-10
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多