在R中,我有一张人们对多项选择问卷的回复表,例如表1:
subject question1 question2 question3
person1 1 2 1
person2 2 1 3
person3 4 3 1
person4 2 4 2
我有一些表格,我想用它们来组合他们对问题的答案,以产生一个新的变量,例如:表2:
Q2=1 Q2=2 Q2=3 Q2=4
Q1=1 1 1 2 2
Q1=2 2 2 2 3
Q1=3 3 3 4 4
Q1=4 4 4 4 5
行#是对问题1的回答,#列是对问题2的回答。例如,如果他们回答" 3"问题1和" 2"问题2,我需要第二个表第3行/第2列的相应值,即" 3"。
当我使用代码时:
table1$combinedq1q2 = (table2[table1$question1, table1$question2])
我希望最终得到:
subject question1 question2 question3 combinedq1q2
person1 1 2 1 1
person2 2 1 3 2
person3 4 3 1 4
person4 2 4 2 3
但相反,R正在生成名为combinedq1q2.1,combinedq1q2.2,combinedq1q2.3等的bajillion列...我不明白为什么会发生这种情况或如何解决它。 ):我很感激任何帮助!
我确实看过this thread,如果我找不到任何其他解决方案,我只是从那里复制代码而不是真正理解它。但是,由于我查找的值与行数和列数相同,我希望有一个更简单的解决方案。
谢谢!
编辑:谢谢你的回复!我在表2中添加了行名和列名来澄清。我试图使用问题1和问题2的答案来查找/访问表2中第三个变量的值(我已经有表2;我不需要生成它)。另外,在我之前的例子中,combinedq1q2碰巧总是匹配问题1,所以我添加了另一个人/行来表明这不会总是如此。我会尝试到目前为止所建议的内容,虽然我很困惑有人说我会为person3获得combinedq1q2 = 5。
答案 0 :(得分:1)
我认为你的问题是“我如何查找table2
的(问题1,问题2)(第1行,第2行)并保存每个人的结果”,其中{ {1}}给出了。 (与“我如何生成table2
”相反。
如果是这样,您可以在表格中使用矩阵索引。即制作一个2列矩阵,其中每一行是(行,列)坐标,并使用它来索引table2
。
table2
然而,此输出与您的输出不匹配。例如,person3有(question1,question2)=(4,3),df$question1question2 = table2[cbind(df$question1, df$question2)]
的元素是5,但在你想要的输出中你有4个(事实上,它看起来你只是想要{{1} }与table2
相同。
您必须澄清所需的输出。
如果您的问题围绕如何生成 question1question2
,那么您必须回答我关于该表格构建方式的评论。