gpt4 book ai didi

r - R中数据框的总和部分

转载 作者:行者123 更新时间:2023-12-04 12:37:47 25 4
gpt4 key购买 nike

对于示例数据框:

structure(list(id = 1:10, group.id = structure(c(1L, 1L, 1L, 
2L, 2L, 2L, 3L, 3L, 3L, 1L), .Label = c("a", "b", "c"), class = "factor"),
x = c(2.12, 1.23, 2.36, 4.21, 2.36, NA, 2.36, 4.36, 1.23,
2.23), y = c(6.56, 2.36, NA, 4.36, 1.23, 8.56, 4.23, 5.36,
2.36, 1.23), z = c(4.36, NA, 5.23, 5.36, 1.23, 4.23, 1.23,
NA, 3.26, 2.23), group.x = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), group.y = c(NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA), group.z = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA)), .Names = c("id", "group.id", "x", "y", "z", "group.x",
"group.y", "group.z"), class = "data.frame", row.names = c(NA,
-10L))

我希望用组 ID 在 x、y 和 z 列中的值的平均值填充 group.x/y/z。

因此,ID 1、2、3 和 10 中的值的平均值被平均并填充到相应的列“group.x”、“group.y”和 group.z 中。随后对组执行此操作b 和 c,填充行。

理想情况下,我想要一个额外的表格来详细说明组以及值的数量和平均值,这样我就可以评估这些值的代表性。凭借我对 R 的基本知识,我只会对数据框进行子集化,并对每个部分进行平均和计数,但是必须有更好的方法......有什么想法吗?

最佳答案

我们可以使用 data.table 创建新列,其 mean 值为 'x', 'y', 'z' 按 'group.id' 分组柱子。我们使用 setDT(df1) 将“data.frame”转换为“data.table”(或者我们可以按照@Ricardo Saporta 的建议使用 as.data.table . 一个优点是初始数据集保持不变。我更喜欢使用 setDT (只是主观的))。我们不需要在初始数据集中创建 NA 列。

library(data.table)
setDT(df1)[, paste('group', c('x', 'y', 'z'), sep=".") :=
lapply(.SD, mean, na.rm=TRUE), group.id, .SDcols=c('x','y','z')]

假设我们已经有 NA 列,确保类是相同的,即“数字”

setDT(df1)[, 6:8 := lapply(.SD, as.numeric), .SDcols=6:8][, 
paste('group', c('x', 'y', 'z'), sep=".") :=
lapply(.SD, mean, na.rm=TRUE), group.id, .SDcols=c('x','y','z')]

关于r - R中数据框的总和部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com