【问题标题】:(Recasting data as cross reference table in R) Extracting variable (Z) dimensioned on two categorical variables (X & Y)(将数据重铸为 R 中的交叉引用表)提取变量 (Z) 以两个分类变量 (X & Y) 为维度
【发布时间】: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


【解决方案1】:

根据 Metrics 的建议,我做了以下工作:

install.packages("reshape")
library("reshape")

cast(df, Person.Id~Question.Num, value = "Response")

最后一部分是关键。 value = "Response" 告诉强制转换函数使用什么变量来填充表格。

这是一个很棒的包。您可以在此处找到更多信息:

http://www.statmethods.net/management/reshape.html

以及发表在Journal of Statistical Software上的原始论文:

http://www.jstatsoft.org/v21/i12/paper

感谢您的提示!

我从未尝试过 tidyr 包,因为 reshape 包效果很好。也许,使用该软件包同样容易。我把它留给社区来解决。

谢谢!

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多