繁体   English   中英

根据R中的组编号提取列的数据

[英]extract data of the column based on group numbering in R

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

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:(基于“No.”一栏)

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))    
}

也许您可以使用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
))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM