我运行具有同一问题的多个版本的实验,具体取决于参与者分配的条件。所以,假设我有两个条件:A和B.在我的数据文件中,每个问题的响应值显示在不同的列中
我想完成两件事:
创建一个名为“Condition”的变量,如果例如Q1ifCondA的值不为空,则赋值“A”,如果Q1ifCondB不为空,则类似地赋值“B”。
为每个问题创建单个变量,Q1,Q2和Q3,如果条件== A,则将Q1ifCondA的值分配给Q1,如果条件== B,则从Q1ifCondB分配给Q1。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我们可以使用lapply
在循环(grep
)中对相似的问题列进行分组,以查找各个问题列名称的位置('Q1','Q2','Q3')和子集数据集(df1[grep(x, names(df1))]
)。从示例数据来看,不清楚是否会出现两列“非空白”或两者都是“空白”的情况,也没有提及如何处理此类情况。假设它没有发生,我们可以使用max.col
来获得列位置(将给出1或2)。将该索引替换为“A”或“B”(LETTERS[1:2][max.col...]
)
df1[paste0('ConditionQ', 1:3)] <- lapply(paste0('Q',1:3), function(x)
{x1 <- df1[grep(x, names(df1))]
LETTERS[1:2][max.col(x1!='')]})
df1
# Partic Q1ifCondA Q2ifCndA Q3ifCondA Q1ifCondB Q2ifCondB Q3ifcondB ConditionQ1
#1 1 3 6 8 A
#2 2 1 5 4 A
#3 3 7 4 2 B
#4 4 1 9 6 A
#5 5 5 9 4 B
#6 6 4 8 5 B
#7 7 6 3 3 A
#8 8 7 4 7 B
# ConditionQ2 ConditionQ3
#1 A A
#2 A A
#3 B B
#4 A A
#5 B B
#6 B B
#7 A A
#8 B B
df1 <- structure(list(Partic = 1:8, Q1ifCondA = c("3", "1", "", "1",
"", "", "6", ""), Q2ifCndA = c("6", "5", "", "9", "", "", "3",
""), Q3ifCondA = c("8", "4", "", "6", "", "", "3", ""), Q1ifCondB = c("",
"", "7", "", "5", "4", "", "7"), Q2ifCondB = c("", "", "4", "",
"9", "8", "", "4"), Q3ifcondB = c("", "", "2", "", "4", "5",
"", "7")), .Names = c("Partic", "Q1ifCondA", "Q2ifCndA", "Q3ifCondA",
"Q1ifCondB", "Q2ifCondB", "Q3ifcondB"), row.names = c(NA, -8L
), class = "data.frame")