我有一个像这样的输入数据帧“testdata”:
valX valY id
1 2 NA
4 5 NA
7 8 1
如果我做:
aggregate(data.frame(testdata$valX, testdata$valY), by = list(id = testdata$id), FUN = mean)
我只得到id不是NA的行。
有没有人知道如何在id为NA的所有行中应用聚合?
我想得到一些像这样的结果:
valX valY id
2.5 3.5 NA
7 8 1
注意:由于某些许可证原因,我更倾向于使用基本R软件包。
aggregate
的问题在于它只保留参数by
中传递的对象中的完整个案,并且没有禁用它的选项。
我建议使用dplyr
或data.table
:
dplyr
解决方案:
library(dplyr)
testdata %>%
group_by(id) %>%
summarise_all(mean)
# A tibble: 2 x 3
id valX valY
<int> <dbl> <dbl>
1 1 7.0 8.0
2 NA 2.5 3.5
随着data.table
library(data.table)
setDT(testdata)
testdata[, lapply(.SD, mean), by = id]
id valX valY
1: NA 2.5 3.5
2: 1 7.0 8.0
你可以试试
aggregate(data.frame(testdata$valX, testdata$valY),
by = list(replace(testdata$id, is.na(d$id), "NA")), FUN = mean)
Group.1 d.valX d.valY
1 1 7.0 8.0
2 NA 2.5 3.5