【发布时间】:2015-03-02 02:41:31
【问题描述】:
这似乎应该很简单,但我已经挣扎了一段时间来解决。我正在尝试提取变量 Z 的值 - 给定两个分类变量 X 和 Y 的值。
** 但是,我想对 X 和 Y 的所有组合执行此操作 **
因此,对于任何给定的值,这很容易 - 我可以使用以下代码获得 Z(假设数据框称为 df):
df[df$X == 1 & df$Y == 2, ]$Z
但是,我想用它来建立一个交叉引用表。
下面的例子会让这很容易理解。
这是数据框的简化版本:
Person ID Question Number Response
1 10 YES
1 20 NO
1 30 YES
2 10 YES
2 20 MAYBE
2 30 YES
3 10 YES
3 30 NO
4 20 NO
4 30 MAYBE
我希望能够获取这些数据并制作一个交叉引用 data.frame,如下所示:
[行名是“Person ID”的级别,列名是“问题编号”的级别]
[10] [20] [30]
[1] YES NO YES
[2] YES MAYBE YES
[3] YES N/A NO
[4] N/A NO MAYBE
我已经尝试过“表格”功能给我汇总统计,频率计数。所以,如果我使用以下内容:
table(df$Person.Id, df$Question.Num)
我得到了正确的行和列标题,但值是频率计数。由于这是一个交叉引用表,我需要将其作为 df$Response 的值而不是频率计数。
正如我之前所说,我可以使用以下代码手动查找 df$Response 的每个值
df[df$Person.ID == "1" & df$Question.Num == "20", ]$Response
但是,我无法将它拼接到一个 data.frame 中。我尝试使用嵌套的 for 循环,但无法让它工作。我可以得到所有的值,但无法将所有内容拼接到交叉引用表中,如上所述。
只是背景说明:这是必要的准备步骤,因此我可以最小化 logit 线性模型。
【问题讨论】:
-
您可以使用
reshape将日期转换为宽格式。 -
试试
library(tidyr);spread(df, Question.Num, Response)
标签: r