【问题标题】:r - look up values in a table based on other variables representing row and column numberr - 根据表示行号和列号的其他变量在表中查找值
【发布时间】:2016-10-07 02:41:16
【问题描述】:

在 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 的回答。例如,如果他们对问题 1 回答“3”,对问题 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 正在生成一个名为 combineq1q2.1、combinedq1q2.2、combinedq1q2.3 等的 bajillion 列...我不明白为什么会发生这种情况或如何解决它。 ): 如有任何帮助,我将不胜感激!

我确实查看了this thread,如果我找不到任何其他解决方案,我将直接从那里复制代码而不真正理解它。但由于我查找值的依据与行号和列号相同,我希望有一个更简单的解决方案。

谢谢!

编辑:感谢您的回复!我在表 2 中添加了行名和列名以进行澄清。我正在尝试使用问题 1 和问题 2 的答案来查找/访问表 2 中第三个变量的值(并且我已经有了表 2;我不需要生成它)。此外,在我之前的示例中,combinedq1q2 恰好总是匹配 question1,所以我添加了另一个人/行以表明情况并非总是如此。

我会尝试目前的建议,尽管我对有人说我会为 person3 得到 combineq1q2=5 感到困惑。

【问题讨论】:

  • 您的输出没有意义。例如,person3 对 question1 的回答为 4,对 question2 的回答为 3,因此根据您的说法,table2[4, 3] 应该等于 4,但您却将其设为 5。另外,如果多个人对问题的回答相同,您会怎么做1和问题2?或者如果没有人有那个 (question1, question2) 组合? (在您的示例表 2 中,您的 (1, 3) 的值为 3,但没有人用 1 回答问题 1,用 3 回答问题 2。此外,您的“我希望最终得到”combinedq1q2 似乎与question1 相同且与您的table2 不匹配。
  • table1$combinedq1q2 <- mapply(function(q1, q2){table2[q1, q2]}, table1$question1, table1$question2)
  • 哦,我明白了 - 是不是您有 table2(其定义与您的解释不符),但您想访问来自 @987654331 的值@?或者您想生成 table2

标签: r


【解决方案1】:

认为您的问题是“我如何查找 table2 的第 (question1, question2)th (row, col) 并为每个人保存结果”,其中 table2给出。 (相对于“我如何生成table2”)。

如果是这样,您可以在表格中使用矩阵索引。即创建一个 2 列矩阵,其中每一行是(行、列)坐标,并使用它来索引 table2

df$question1question2 = table2[cbind(df$question1, df$question2)]

但是,此输出与您的不匹配。例如,person3 有 (question1, question2) = (4,3),table2 的元素是 5,但在您想要的输出中,您有 4(实际上,看起来您只是希望 question1question2 成为与question1相同。

你必须澄清你想要的输出。

如果你的问题是关于如何生成table2,你必须回答我关于这个表是如何构造的评论。

【讨论】:

  • 您的解决方案和 alistaire 都有效——感谢您的帮助!谁能告诉我为什么 table1$combinedq1q2 = (table2[table1$question1, table1$question2]) 没有按预期工作?
  • 我相信,如果您同时提供i j[,您将获得一个包含所有行的 matrix table1$question1table1$question2 中的所有列。例如。如果您输入table2[c(1,2,4, 2), c(2, 1, 3, 4)],您将获得table2 的第 1、2、4、2 行(再次)和第 2、1、3、4 列。 (AFAIK 这没有记录在?'[' 中,并且您并不是真的要使用它来索引。如果您希望每行坐标有一个数字,则在帮助文件中编写的推荐方法是将坐标提供为 2-列矩阵)
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 2016-02-08
  • 2015-10-10
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
相关资源
最近更新 更多