gpt4 book ai didi

在 lapply(.SD,...) 中为 data.table R 保留列名

转载 作者:行者123 更新时间:2023-12-03 14:57:27 25 4
gpt4 key购买 nike

将具有多个输出变量(例如列表)的函数应用于 data.table 的子集时,我丢失了变量名称。有没有办法留住他们?

library(data.table)

foo <- function(x){
list(mn = mean(x), sd = sd(x))
}

bar <- data.table(x=1:8, y=c("d","e","f","g"))

# column names "mn" and "sd" are replaced by "V1" and "V2"
bar[, sapply(.SD, foo), by = y, .SDcols="x"]

# column names "mn" and "sd" are retained
bar_split <- split(bar$x, bar$y)
t(sapply(bar_split, foo))

最佳答案

我会使用以下内容,这有点尴尬,但无论有多少功能都不需要手动编写名称

bar[, as.list(unlist(lapply(.SD, foo))), by = y, .SDcols = "x"]
# y x.mn x.sd
# 1: d 3 2.828427
# 2: e 4 2.828427
# 3: f 5 2.828427
# 4: g 6 2.828427

这种方法的最大优点是它将函数与列名绑定(bind)在一起。例如,如果您有一个额外的列,它仍然会在使用与上面相同的代码时提供信息性结果
set.seed(1)
bar[, z := sample(8)]
bar[, as.list(unlist(lapply(.SD, foo))), by = y, .SDcols = c("x", "z")]
# y x.mn x.sd z.mn z.sd
# 1: d 3 2.828427 2.0 1.4142136
# 2: e 4 2.828427 7.5 0.7071068
# 3: f 5 2.828427 3.0 1.4142136
# 4: g 6 2.828427 5.5 0.7071068

关于在 lapply(.SD,...) 中为 data.table R 保留列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906702/

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