【发布时间】:2020-12-07 11:48:32
【问题描述】:
我有一个包含人口统计信息和问题的数据集。
DF<-(Participant = c(1,2,3,4,5,6,7,8,9,10)
Male = c(1,0,1,1,0,1,0,0,1,0)
Female = c(0,1,0,0,1,0,1,1,0,1)
Q1 = c(9,6,5,4,5,1,3,5,5,2)
Q2 = c(2,4,5,4,2,1,3,5,4,2)
Q3 = c(6,8,2,7,5,2,1,1,6,3))
我有两个列表(由列标题组成),一个是人口统计信息(男性、女性、年龄组等),另一个是带有相关回答的问题。
Demographic <- c(“Male”, “Female”, “Age_group_1”, “Age_group_2”…)
Questions<- c(“Q1”, “Q2”, Q3”, “Q4”…)
我需要一些类似的东西——如果人口统计列中的值等于 1,那么将所有单独问题列中的分数相加。但我想这样做是一个循环,所以我对人口统计列表(~80)中的所有列都有单独的问题分数(~300)。另外我想保存输出。我不知道该怎么做,而且我自己也陷入了糟糕的编程循环!
最终结果应如下所示:
M F
Q1 20 21
Q2 16 16
Q3 23 18
如果有任何帮助,我将不胜感激!
提前致谢。
更新:
在朋友的帮助下,我找到了解决问题的方法。但是,您如何提高效率?
df.list <- list()
for(question in questions){
question.df <- (DF[, lapply(.SD,sum, na.rm=T), by=question,
.SDcols=c(demographic)])
df.list <- append(df.list, question.df)}
list_new <- bind_cols(df.list, .id = "column_label")
【问题讨论】:
-
第一段代码运行不正常。也许您的意思是:` DF