【发布时间】:2020-08-31 00:51:10
【问题描述】:
我有一个以列 ID 作为标识符的数据框和其他一些不同类型的列(因子和数字)。看起来是这样的
df <- data.frame(id = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4),
abst = c(0, NA, 2, NA, NA, NA, 0, 0, NA, 2, NA, 3, 4),
farbe = as.factor(c("keine", NA, "keine", NA, NA, NA, "keine", "keine", NA, NA, NA, "rot", "rot")),
gier = c(0, NA, 5, NA, NA, NA, 0, 0, NA, 1, NA, 6, 2))
现在我想合并重复的 ID。数字列定义为所有相同 ID 的平均值(没有 NA!)。因子列合并为一个。 NA 可以省略。
最终结果应该是这样的
dfRes <- data.frame(id = c(1, 2, 3, 4),
abst = c(1, 0, 0, 3),
farbe = as.factor(c("keine", "keine", "keine", "rot")),
gier = c(2.5, 0, 0, 3))
我希望有一种方法可以快速进行计算,因为我有大约一百万个观察值。 提前致谢!
编辑(添加):“farbe”可能不是唯一的。在这种情况下,我认为对我的数据最好的想法是有一个重复的行,但只有一个不同的“farbe”,所以有 2 个相同的 ID 和“farbe”的所有相同但不同的值。这应该只是非常罕见的情况,但却是一个很好的补充。
我的真实数据中有更多的数值列和因子列。是否也可以创建一个解决方案,所以我不必定义每一列?
【问题讨论】:
-
对于相同的
id,farbe是否总是相同的? -
好问题,我希望如此。否则问题不大。但是必须做出决定,应该使用哪个值。
-
我认为到目前为止发布的所有解决方案都假定是唯一的
farbe(至少我的是这样)。如果不是,你是唯一一个知道如何处理不同价值观的人。之后我们可以修改答案。 -
你是对的。在这种情况下,我认为对我的数据最好的想法是有一个重复的行,但只有一个不同的“farbe”。这应该只是非常罕见的情况,没关系。
标签: r dataframe data.table aggregate tidyverse