在我对我的Qualtrics调查中,每个参与者都收到了一组以随机顺序提出的问题。
我现在想确定一个问题(请参阅表中的"问题"变量(在参与者的随机问题顺序中。缩短示例中的问题是I1,I2或I3。
现在就组织了数据,使得有些列与顺序相对应(在下面的缩短示例中," b1"," b2"one_answers" b3"(。也就是说,B1列中的问题首先是该参与者的。
这是数据的文件(https://drive.google.com/open?id=1H18slq-gmruzh93m5y5y5t3tue22yxsjbu(,这就是它在r:
中打印出来的。> head(testd)
Question B1 B2 B3
1 I1 I1 I2 I3
2 I1 I3 I2 I1
3 I2 I2 I3 I1
4 I2 I3 I1 I2
5 I3 I2 I1 I3
6 I3 I1 I3 I2
我现在想在dataframe testd中写一个for循环,以使我是否会在列中告诉我"问题"中的问题(例如,i1(,首先提出了参与者的问题(i1((i1((b1(,第二(B2(或第三(B3(。例如,在上面的示例中,第1行的随机排列应为B1,因为列"问题"中的值是i1,而列中的值是i1。
。为此,我首先将" b1"," b2"one_answers" b3"的值串联在一起。
testd <- read.csv("TestData.csv")
BSet <- c("B1", "B2", "B3")
testd[BSet]
然后,我写了以下循环。我的目标是:对于每行i,如果三个BSET列之一中的一个值与问题列中的值相同,则该行的可变随机订单应在其中一个中的值列。BSET列与问题列中的值相同。
例如,如果第1行中的testd $ b1 = i1,而第1行中的testd $ Question = i1,则该循环应使testd $随机订单等于B1。
for (i in nrow(testd)) {
for (j in 1:3) {
if (testd[i,BSet][[j]] == testd$Question[i]) {
testd$RandomizedOrder[i] <- colnames(testd[i,BSet][j])
}
}
}
这就是R输出的样子。
> head(testd$RandomizedOrder)
[1] NA NA NA NA NA "B2"
我不确定为什么除了第六个项目以外的所有内容。
这是我想要的循环要做的:制作一个名为"随机订单"的新变量,该变量指示每行,哪个列包含"问题"列中的值。
Question B1 B2 B3 RandomizedOrder
1 I1 I1 I2 I3 B1
2 I1 I3 I2 I1 B3
3 I2 I2 I3 I1 B2
4 I2 I3 I1 I2 B3
5 I3 I2 I1 I3 B3
6 I3 I1 I3 I2 B2
我浏览了代码,以确保各个零件可以解决。
此处的代码是真实的(平等标志的双方都产生值I1(:
testd [1,bset] [[1]] == testd $问题[1] [1] true
我还可以手动告诉R用列名替换testd $ Randomibledorder中的值。
> testd$RandomizedOrder[1] <- colnames(testd[1,BSet][1])
> head(testd$RandomizedOrder)
[1] "B1" NA NA NA NA "B2"
有人可以帮我确定为什么for循环不起作用?
预先感谢您。
(请注意,这似乎可以用6个观测值手动手动完成,但这是我真实数据集的简单示例。我的实际数据集有48个问题(即i1至i48(,并且因此,我已经使用字母j。索引了BSET表示的列数。
在conframe列名称上考虑匹配的 lapply
,然后使用Reduce
,用于coc_2,用于cocesce方法,将所有列用于随机订单 sigsion。
txt = "Question B1 B2 B3
1 I1 I1 I2 I3
2 I1 I3 I2 I1
3 I2 I2 I3 I1
4 I2 I3 I1 I2
5 I3 I2 I1 I3
6 I3 I1 I3 I2"
testd <- read.table(text=txt, header=TRUE)
colList <- lapply(names(testd)[-1], function(i)
ifelse(testd$Question == testd[[i]], i, NA))
testd$RandomizedOrder <- Reduce(function(x, y) {
x[which(is.na(x))] <- y[which(is.na(x))]
x}, colList)
testd
# Question B1 B2 B3 RandomizedOrder
# 1 I1 I1 I2 I3 B1
# 2 I1 I3 I2 I1 B3
# 3 I2 I2 I3 I1 B1
# 4 I2 I3 I1 I2 B3
# 5 I3 I2 I1 I3 B3
# 6 I3 I1 I3 I2 B2