r - 制表多个响应问题

标签 r apply

想象一下,我有一个问题,有四个选项,受访者可以选择零个或四个选项的任意组合。变量名为 A , B , C , 和 D并且响应存储在 data.frame 中,如下所示。

set.seed(1)
dat = data.frame(A = sample(c(0, 1), 20, replace=TRUE), 
                 B = sample(c(0, 1), 20, replace=TRUE), 
                 C = sample(c(0, 1), 20, replace=TRUE),
                 D = sample(c(0, 1), 20, replace=TRUE))

我可以通过执行以下操作将响应的组合(例如,有多少响应与 A 单独,或 A + BC + D 等):
data.frame(table(dat))
#    A B C D Freq
# 1  0 0 0 0    2
# 2  1 0 0 0    2
# 3  0 1 0 0    0
# 4  1 1 0 0    1
# 5  0 0 1 0    1
# 6  1 0 1 0    3
# 7  0 1 1 0    0
# 8  1 1 1 0    2
# 9  0 0 0 1    0
# 10 1 0 0 1    2
# 11 0 1 0 1    1
# 12 1 1 0 1    1
# 13 0 0 1 1    2
# 14 1 0 1 1    0
# 15 0 1 1 1    3
# 16 1 1 1 1    0

我现在想创建一个新列,显示此输出所表示的字母组合。例如,第 4 行表示 A 的计数+ B响应,第 14 行表示 A 的计数+ C + D回应。

我认为其中之一apply函数在这里很有用,但我不确定如何进行。

最佳答案

dat.t <- data.frame(table(dat))    
dat.t$combn <- apply(dat.t[,1:4] == 1, 1, function(x) paste(names(dat)[x], collapse=' + '))

> dat.t
   A B C D Freq         combn
1  0 0 0 0    2              
2  1 0 0 0    2             A
3  0 1 0 0    0             B
4  1 1 0 0    1         A + B
5  0 0 1 0    1             C
6  1 0 1 0    3         A + C
7  0 1 1 0    0         B + C
8  1 1 1 0    2     A + B + C
9  0 0 0 1    0             D
10 1 0 0 1    2         A + D
11 0 1 0 1    1         B + D
12 1 1 0 1    1     A + B + D
13 0 0 1 1    2         C + D
14 1 0 1 1    0     A + C + D
15 0 1 1 1    3     B + C + D
16 1 1 1 1    0 A + B + C + D
> 

关于r - 制表多个响应问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11348391/

相关文章:

r - lm()中的poly():原始与正交之间的差异

r - 如何对新数据使用预测?

r - 数据框中所有列的唯一值计数

javascript - 在 JavaScript 中,如何使用参数值数组构造对象,而不是列出它们?

r - 如何合并两个表,然后使用 data.table 一步制表计数

r - ggplot2:如何向上移动 x 轴,使其可以在水平条形图中任意选取的条形下?

r - R中的分形盒计数

javascript - 如何使用带有可选参数命名的Apply调用函数?

r - 字符串将值拆分为两列,然后将它们连接成一个新列

R - 致力于速度/效率 - 从大文件创建+更新矩阵