【问题标题】:Reformat categorical data in R在 R 中重新格式化分类数据
【发布时间】:2014-12-06 03:00:36
【问题描述】:

我有一个分类数据集,我试图对其进行总结,该数据集在所问问题的性质上存在固有差异。下面的数据代表一份问卷,其中包含标准的封闭式问题,但也包含可以从列表中选择多个答案的问题。 “村庄”和“收入”代表封闭式问题。 "responsible.1"...etc... 代表一个列表,其中受访者对每个都说是或否。

VILLAGE  INCOME         responsible.1   responsible.2   responsible.3   responsible.4   responsible.5
   j     both           DLNR             NA              DEQ              NA           Public
   k     regular.income DLNR             NA              NA               NA           NA
   k     regular.income DLNR             CRM             DEQ              Mayor        NA
   l     both           DLNR             NA              NA               Mayor        NA
   j     both           DLNR             CRM             NA               Mayor        NA
   m     regular.income DLNR             NA              NA               NA           Public

我想要的是一个 3 路表输出,其中包含“村庄”和一组“负责任”的负责变量,这些变量包含在 ftable 中。这样一来,我就可以使用带有大量 R 包的表格进行图表和分析。

        RESPONSIBLE             
VILLAGE INCOME          responsible.1   responsible.2   responsible.3   responsible.4   responsible.5
j       both            2               1               1               1               1
k       regular income  2               1               1               1               0
l       both            1               0               0               1               0
m       regular income  1               0               0               0               1

as.data.frame(table(village, responsible.1) 会让我成为第一个,但我不知道如何将整个事情包裹在一个漂亮的 ftable 中。

【问题讨论】:

  • 第二个表格是否显示了预期的结果?
  • 是的,第二个表有“RESPONSIBLE”作为变量名,有五级答案。其他两个变量是不言自明的。您能否还建议如何将我们“整洁”的表格粘贴到评论板中以避免刚刚发生的事情?
  • 您可以通过单击{} 图标来格式化问题中的代码
  • 如果您希望“responsible.1”值成为分组的第三维,则将其作为所需输出中的一列删除,并将其放在 INCOME 上方的位置。
  • 我想这总结了我想要的。 “responsible.1, etc..”是“RESPONSIBLE”变量的级别,与其频率相关联。第三个维度就是“负责任”,具有这些级别和频率。

标签: r reformat


【解决方案1】:
> aggregate(dat[-(1:2)], dat[1:2], function(x) sum(!is.na(x)) )
  VILLAGE         INCOME responsible.1 responsible.2 responsible.3 responsible.4 responsible.5
1       j           both             2             1             1             1             1
2       l           both             1             0             0             1             0
3       k regular.income             2             1             1             1             0
4       m regular.income             1             0             0             0             1

我猜你实际上有另一个分组向量,也许是第一个“负责”列?

我不太了解排序规则,但是颠倒分组列的顺序可能更接近您发布的内容:

> aggregate(dat[-(1:2)], dat[2:1], function(x) sum(!is.na(x)) )
          INCOME VILLAGE responsible.1 responsible.2 responsible.3 responsible.4 responsible.5
1           both       j             2             1             1             1             1
2 regular.income       k             2             1             1             1             0
3           both       l             1             0             0             1             0
4 regular.income       m             1             0             0             0             1

【讨论】:

  • 这看起来很棒,但我怎样才能把它变成一个 ftable(即,三向表,适用于分类图形和 loglm)?会喜欢将“responsible.1, etc..”包装到一个变量“RESPONSIBLE”中,该变量包装在 3-way ftable 中。
  • 如果您“喜欢”看到不同数据问题的解决方案,请发布一个示例,该示例提供了足够复杂性以进行修改。
  • 请不要使用“etc”作为请求的描述。我对问题陈述中的那个缩写产生了强烈的过敏反应。
  • 抱歉,明确地说,我想要的是从第一个表中导出我发布的第二个表,同时让第二个表作为频率表存在。
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多