gpt4 book ai didi

r - 访问 SD 构造中的列名

转载 作者:行者123 更新时间:2023-12-05 00:46:48 24 4
gpt4 key购买 nike

我在 R 中有一个如下所示的数据表

DT = data.table(a = c(1,2,3,4,5), a_mean = c(1,1,2,2,2), b = c(6,7,8,9,10), b_mean = c(3,2,1,1,2))

我想再创建两列 a_final 和 b_final,分别定义为 a_final = (a - a_mean) 和 b_final = (b - b_mean)。在我的现实生活用例中,可能有大量这样的列对,我想要一个本着 R 数据表精神的可扩展解决方案。

我尝试了一些类似

的方法
DT[,paste0(c('a','b'),'_final') := lapply(.SD, function(x) ((x-get(paste0(colnames(.SD),'_mean'))))), .SDcols = c('a','b')]

但这并不完全奏效。知道如何访问 lapply 语句中正在处理的列的列名吗?

最佳答案

我们可以创建一个带有列名的字符向量,从原始 data.table 中对其进行子集化,获取它们对应的“平均”列,减去和添加为新列。

library(data.table)
cols <- unique(sub('_.*', '', names(DT))) #Thanks to @Sotos
#OR just
#cols <- c('a', 'b')

DT[,paste0(cols, '_final')] <- DT[,cols, with = FALSE] -
DT[,paste0(cols, "_mean"), with = FALSE]
DT
# a a_mean b b_mean a_final b_final
#1: 1 1 6 3 0 3
#2: 2 1 7 2 1 5
#3: 3 2 8 1 1 7
#4: 4 2 9 1 2 8
#5: 5 2 10 2 3 8

关于r - 访问 SD 构造中的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59528251/

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