gpt4 book ai didi

r - 使用r中的data.table创建具有不同规则的列

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

我试图更好地理解 r 中的 data.table 包。我想对某些列进行不同类型的计算,并将结果分配给具有特定名称的新列。下面是一个例子:


set.seed(122)
df <- data.frame(rain = rep(5,10),temp=1:10, skip = sample(0:2,10,T),
windw_sz = sample(1:2,10,T),city =c(rep("a",5),rep("b",5)),ord=rep(sample(1:5,5),2))


df <- as.data.table(df)
vars <- c("rain","temp")

df[, paste0("mean.",vars) := lapply(mget(vars),mean), by="city" ]


这工作得很好。但现在我也想计算这些变量的总和,所以我尝试:

df[, c(paste0("mean.",vars), paste("sum.",vars)) := list( lapply(mget(vars),mean),
lapply(mget(vars),sum)), by="city" ]

我得到一个错误。

我怎样才能实现这最后一部分?

非常感谢!

最佳答案

而不是 list换行,我们可以做一个 clapply输出是 list ,什么时候做 list作为包装器,它返回一个 listlist .但是,与 c ,它连接两个 list端到端(即 c(as.list(1:5), as.list(6:10)) 而不是 list(as.list(1:5), as.list(6:10)) )而不是 mget ,利用 .SDcols

library(data.table)
df[, paste0(rep(c("mean.", "sum."), each = 2), vars) :=
c(lapply(.SD, mean), lapply(.SD, sum)), by = .(city), .SDcols = vars]
df
# rain temp skip windw_sz city ord mean.rain mean.temp sum.rain sum.temp
# 1: 5 1 0 2 a 2 5 3 25 15
# 2: 5 2 1 1 a 5 5 3 25 15
# 3: 5 3 2 2 a 3 5 3 25 15
# 4: 5 4 2 1 a 4 5 3 25 15
# 5: 5 5 2 2 a 1 5 3 25 15
# 6: 5 6 0 1 b 2 5 8 25 40
# 7: 5 7 2 2 b 5 5 8 25 40
# 8: 5 8 1 2 b 3 5 8 25 40
# 9: 5 9 2 1 b 4 5 8 25 40
#10: 5 10 2 2 b 1 5 8 25 40

关于r - 使用r中的data.table创建具有不同规则的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59761310/

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