0

假设我问了 10 个人他们喜欢哪种水果。可能的答案不止一个。将结果输入到 R 中,如下所示:

set.seed(234078)
df <- data.frame(q1.banana = sample(0:1, 10, replace = TRUE),
                 q1.apple  = sample(0:1, 10, replace = TRUE),
                 q1.melon  = sample(0:1, 10, replace = TRUE))

以便

> df
   q1.banana q1.apple q1.melon
1          0        0        1
2          0        1        1
3          1        1        0
4          1        0        0
5          0        1        1
6          0        0        0
7          1        0        0
8          0        0        0
9          0        1        1
10         0        0        1

如何在如下表中总结信息?

q1.*    Freq
banana     3
apple      4
melon      5

搜索后,我发现了一些想法,例如 using interaction(q1.banana, q1.apple, q1.melon),但这给出了不同类型的输出。此外,如果您的答案涉及通配符,我将不胜感激,因为我的真实案例预计会有几十个假人,我不想全部写出来。

4

1 回答 1

2

这可能是一种选择。

set.seed(234078)
df <- data.frame(q1.banana = sample(0:1, 10, replace = TRUE),
                 q1.apple  = sample(0:1, 10, replace = TRUE),
                 q1.melon  = sample(0:1, 10, replace = TRUE))

library(reshape2)
# Melt the data 
df1 <- melt(df)

df1$value <- as.numeric(df1$value)

library(plyr)

# Now use ddply to sum the values
ddply(df1,.(variable),summarize,Freq=sum(value))
   variable Freq
1 q1.banana    3
2  q1.apple    4
3  q1.melon    5

另外的选择

> colSums(df)
q1.banana  q1.apple  q1.melon 
        3         4         5 
于 2014-02-21T18:51:06.667 回答