【发布时间】:2019-03-01 23:48:24
【问题描述】:
我有一个数据集df,其结构类似于以下示例:
nr countrycode questionA questionB questionC WeightquestionA WeightquestionB WeightquestionC
1 NLD 2 1 4 0.6 0.2 0.2
2 NLD NA 4 NA 0.4 0.4 0.2
3 NLD 4 4 1 0.2 0.2 0.6
4 BLG 1 NA 1 0.1 0.5 0.4
5 BLG 5 3 5 0.2 0.2 0.6
问题 A、B 和 C 与相似的主题相关,因此我想为所有问题创建一个平均分数,同时考虑到每个问题的重要性 (WeightquestionA WeightquestionB WeightquestionC)。
目前我已经手动计算了平均分数。
(questionA*WeightquestionA) + (questionB*WeightquestionB) + (questionC*WeightquestionC)
如果不是 NA 的,这将不是一个不可克服的问题(为此:不,它们不能被删除)。因此,我想自动化这个过程。
我目前正在考虑使用sum(!is.na()) 来计算每一行(1 到 5)的每个问题(A、B、C)中的非 NA,并将该值放入一个新列中。
但是,使用 data.table 时,我总是无法正确使用语法。我相信它应该是这样的:
df[, NonNA:=sum(!is.na(questionA + questionB + questionC))]
但这会汇总列中的所有 NA,而不是每一行。我应该如何编写每行计算的语法?
我想按名称分别引用列,因为它们在实际 df 中并不相邻。
期望的输出:
nr countrycode qA qB qC WeightquestionA WeightquestionB WeightquestionC NonNA
1 NLD 2 1 4 0.6 0.2 0.2 3
2 NLD NA 4 NA 0.4 0.4 0.2 1
3 NLD 4 4 1 0.2 0.2 0.6 3
4 BLG 1 NA 1 0.1 0.5 0.4 2
5 BLG 5 3 5 0.2 0.2 0.6 3
【问题讨论】:
-
相关:R: data.table count !NA per row。使用
.SDcols选择相关列。
标签: r sum data.table na