сворачивание повторяющихся строк в data.table в R - PullRequest
0 голосов
/ 28 мая 2020

Я работаю над большой таблицей data.table, в которой беру значения опережения / запаздывания. Это сокращенный пример моих данных:

> data.table(from = c(2012, 2013, 2014, 2012, 2013, 2013, 2013, 2014, 2012, 2013, 2014),
+            item = c("A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C"),
+            loc = c(NA, NA, NA, NA, NA, "other", "others", NA, "NY", "NY", "M"))
    from item    loc
 1: 2012    A   <NA>
 2: 2013    A   <NA>
 3: 2014    A   <NA>
 4: 2012    B   <NA>
 5: 2013    B   <NA>
 6: 2013    B  other
 7: 2013    B others
 8: 2014    C   <NA>
 9: 2012    C     NY
10: 2013    C     NY
11: 2014    C      M

Элемент B имеет несколько вводов для одного и того же года и комбинации элементов, потому что loc отличается. Я хочу, чтобы на каждые from и item они появлялись только один раз. Я хотел бы свернуть эти случаи и указать «несколько» в столбце loc. Как это можно сделать с помощью data.table в R?

желаемый результат:

    from item    loc
 1: 2012    A   <NA>
 2: 2013    A   <NA>
 3: 2014    A   <NA>
 4: 2012    B   <NA>
 5: 2013    B   multiple
 8: 2014    C   <NA>
 9: 2012    C     NY
10: 2013    C     NY
11: 2014    C      M

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете сделать:

aggregate(loc ~ from + item, df, function(x)ifelse(length(x) > 1, "multiple", x), na.action = NULL)
  from item      loc
1 2012    A     <NA>
2 2013    A     <NA>
3 2014    A     <NA>
4 2012    B     <NA>
5 2013    B multiple
6 2012    C       NY
7 2013    C       NY
8 2014    C multiple
...