извлечь данные столбца на основе нумерации групп в R - PullRequest
1 голос
/ 30 марта 2020

У меня есть такие данные (это небольшая часть моих данных)

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

1 Ответ

1 голос
/ 30 марта 2020

Может быть, вы можете попробовать код ниже, используя 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
))
...