按组聚合并获取不同data.frame列的非NA值的计数、平均值和sd
我在通过下面的函数按组计算非缺失值时遇到一些困难(该函数还提供sd和平均值):按组聚合并获取不同data.frame列的非NA值的计数、平均值和sd,r,aggregate,missing-data,R,Aggregate,Missing Data,我在通过下面的函数按组计算非缺失值时遇到一些困难(该函数还提供sd和平均值): test这里有一个数据。表方法: 数据 您拥有的数据很难读入R中-请使用dput()等,以便其他人更容易读入: > dput(dt) structure(list(someting = c("503", "553", "599", "647", "695", "728", "760", "793", "826", "859", "907", "955", "1003", "1036", "1084", "1
test这里有一个数据。表
方法:
数据
您拥有的数据很难读入R中-请使用dput()
等,以便其他人更容易读入:
> dput(dt)
structure(list(someting = c("503", "553", "599", "647", "695",
"728", "760", "793", "826", "859", "907", "955", "1003", "1036",
"1084", "1131", "1179", "1226", "1274", "1322", "1355", "1402",
"1450", "1497", "1545"), treatment = c("gr.2", "gr.2", "gr.2",
"gr.2", "gr.2", "gr.2", "gr.2", "gr.2", "gr.2", "gr.2", "gr.2",
"gr.3", "gr.3", "gr.3", "gr.3", "gr.3", "gr.3", "gr.3", "gr.3",
"gr.3", "gr.3", "gr.3", "gr.3", "gr.4", "gr.4"), var1 = c(8,
NA, 3, 3, NA, NA, NA, NA, NA, 8, 8, 8, NA, 8, 8, 8, 8, 8, 8,
NA, 8, 8, 8, 8, NA), var2 = c(8L, 8L, 8L, 8L, NA, NA, NA, NA,
NA, 8L, 8L, 8L, NA, 8L, 8L, 8L, 8L, 8L, 8L, NA, 8L, 8L, 8L, 8L,
NA)), .Names = c("someting", "treatment", "var1", "var2"), row.names = c(NA,
-25L), class = c("data.table", "data.frame"))
代码
dt[, .(var1.n = sum(!is.na(var1)),
var2.n = sum(!is.na(var1)),
var1.mean = mean(var1, na.rm = T),
var2.mean = mean(var2, na.rm = T)),
by = .(treatment)]
输出
treatment var1.n var2.n var1.mean var2.mean
1: gr.2 5 5 6 8
2: gr.3 10 10 8 8
3: gr.4 1 1 8 8
由于某种原因,“veh”条目没有被读入。因此,输出略有不同,但原理应该清楚 如果你提供一个示例输入和所需的输出,你会更容易得到帮助。我输入的数据只是一个例子,我的实际数据大约有40个变量。这就是为什么我尝试使用聚合和函数(x)。您的代码需要我为n、mean和sd单独创建一行代码,这太麻烦了。对于这些繁琐的数据,我深表歉意-下次将使用dput。@Jbnimble您可以参考此处发布的多栏作业答案。可以使用colnames(dt)
上的lappy
创建具有新列名的向量,并且可以从函数调用或答案中指定的任何其他方法获得值。
treatment var1.n var2.n var1.mean var2.mean
1: gr.2 5 5 6 8
2: gr.3 10 10 8 8
3: gr.4 1 1 8 8