Как записать несколько значений в одной ячейке в R? - PullRequest
0 голосов
/ 03 января 2019

Мне нужно сравнить table1 с 1 строкой и table2 с 2 рядами.

В строке1 обе таблицы содержат одинаковые значения, но они рандомизированы, а строка2 в table2 содержит несколько разных значений для одного и того же значения в строке1.

Так что мне нужно записать несколько значений в одну и ту же ячейку.

Этот код выполняется, но он некорректен, потому что если значения в строке 2 table2 отличаются для одного и того же значения в строке 1 table1, он просто переписывает его с последним найденным значением. Но мне нужны оба.

for (i in 1:nrow(table1)){
  for (a in 1:nrow(table2)){
    if(table1$row1[i] == table2$row1[a]){
      table1$row2[i] <- paste(table2$row2[a], collapse = ", ")
    } 
  }
}

Пример данных:

table1 ↓

          row1
1  c43bdf23a60
2 164389427682
3  12398826693
4  48492266219
5 150403618359
6 150403618759

table2 ↓

         row1       row2
1 32ba31ce836   21315839
2 7ccaba4ce5d   50729458
3 c43bdf23a60   32204599
4 f66cc27fd46  198217504
5 c43bdf23a60  852948367
6 c43bdf23a60   81423505

любая помощь приветствуется ...

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Может быть, это то, что вам нужно: сначала соберите все значения из row2 для уникальных значений в row1 из table2, затем объедините с table1:

merge(
  x = table1,
  y = aggregate(row2~row1, data = table2, FUN = paste0, collapse = ","),
  all.x = T,
  sort = F
)
0 голосов
/ 03 января 2019

Сначала используйте lapply для построения списка с совпадающими table2$row2 результатами, вставленными в строку

lst <- lapply(table1$row1, function(x) c(row1 = x, row2 = paste(table2[table2$row1 == x, ]$row2, collapse=", ")))

Преобразование list в data.frame

as.data.frame(do.call(rbind, lst))

          row1                          row2
1  c43bdf23a60 32204599, 852948367, 81423505
2 164389427682                              
3  12398826693                              
4  48492266219                              
5 150403618359                              
6 150403618759

Этосоздание нового data.frame и без слияния с table1 (при необходимости не очищается).


Изменение исходного кода для вставки вставленных значений в table1

for (i in seq_len(nrow(table1))){
  table1$row2[i] <- paste(table2[table2$row1 == table1$row1[i], ]$row2, collapse = ", ")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...