【发布时间】:2020-12-03 03:38:24
【问题描述】:
我是 R 新手,想知道是否有人可以提供帮助?我有 200 多列和一个加权列,所以我需要将每一列乘以其相关的权重来创建新的加权列,以便我可以进一步分析数据。每列都有多个级别,所以我的性别有 2(男性,女性例子)。如何遍历所有列以创建新变量,就像我在下面为一列所做的那样?
DF[,gender_w:=gender*weight/gender]
DF[,lapply(.SD,sum, na.rm=T),by= gender, .SDcols=c(all_weighted_column_names)]
提前感谢您的任何建议。
编辑-更多信息
DF <- (Gender = c(1,2,2,1,2),
Age_group = c(1,5,5,4,3)
Question1 = c(1,0,0,1,1)
Question2 = c(0,1,0,1,1)
Weight = c(2,5,3,1,5))
我必须发布虚拟变量,但希望这会帮助您了解图片。
在这个例子中,我需要每个变量中每个组的总和,但我需要先对它们进行加权。所以对于性别,如果 1 = M 和 2 = F 那么我不需要 2 个男性和 3 个女性,但我需要将它们乘以相应的权重,然后将它们相加。所以我需要它来显示 3 个男性和 13 个女性。
In the age_group, instead of Age_group_1 = 1, Age_group_3 = 1, Age_group_4 = 1 and Age_group_5 = 2. I need to produce Age_group_1 = 2, Age_group_3 = 5, Age_group_4 = 1 and Age_group_5 = 8
有没有办法做到这一点并遍历所有列?我总共有 +200,但我想不出一个有效的方法来做到这一点。
再次感谢您的帮助。
【问题讨论】:
-
如果你用 2 列数据和一个权重变量以及只有几行来制作一个虚拟示例,那将是最好的。然后你可以通过
dput()分享它。 -
您可能应该将 data.table 融化为长格式。如果您需要宽格式,您可以稍后进行 dcast。
-
您的问题令人困惑。也许你正在寻找这个:
DF[, paste0(head(names(DF), -1), "_w") := lapply(.SD, function(x) x * Weight), .SDcols = head(names(DF), -1)]
标签: r loops data.table lapply levels