【发布时间】:2018-11-13 10:57:30
【问题描述】:
我有一个看起来像这样的数据框:
Name Variable1 Value1 Variable2 Value2
1 Michael A 2 <NA> <NA>
2 Michael B 3 <NA> <NA>
3 Michael <NA> <NA> X 10
4 John B 5 <NA> <NA>
5 John E 3 <NA> <NA>
6 John <NA> <NA> Y 20
7 John <NA> <NA> Z 40
8 Paul C 10 <NA> <NA>
9 Paul D 5 <NA> <NA>
在所有行中,有一个 Variable1/Value1 对或一个 Variable2/Value2 对。
我正在尝试使用dplyr 与group_by 和filter 函数的组合来生成一个数据框,该数据框具有(1)每个名称只有一行和(2)1和2的最大值对. 在这种情况下,我的决赛桌看起来像:
Name Variable1 Value1 Variable2 Value2
1 Michael B 3 X 10
2 John B 5 Z 40
3 Paul C 10 <NA> <NA>
我似乎无法获得正确的分组流程来正确执行此操作。我想到的一个解决方案是将每对数据帧分成两个,过滤,分别使用group_by和filter,然后根据名称将它们重新组合在一起,但我想知道是否有人有提供更直接的解决方案。也许有summarise 的东西?
谢谢!
编辑:更正了表中缺失的 NA 值。
【问题讨论】:
-
aggregate(df, by=list(Name), + FUN=max, na.rm=TRUE) -
在
dplyr方法中:group_by(x, Name) %>% summarise_all(max)。在data.table-speak:x[,lapply(.SD, max),by="Name"]。 -
这些解决方案似乎不起作用——两者都给我处理因素方面的错误,大概是因为 max 不适用于列变量 1 和变量 2。我希望能够得到 Value1 和 Value2 的最大值,然后也得到关联的变量。
-
第 4 行和第 5 行中变量 2 的缺失值是空白还是 NA?
-
它们本应为 NA。谢谢!固定。