R总结基于定量子集的定性数据(dplyr?)

时间:2015-04-20 19:33:08

标签: r subset plyr dplyr

我真的很难弄清楚如何对数据进行反向分析,其中我通过定量值对数据进行分区,并根据这些组汇总描述性统计数据。

为了帮助解释,请参阅下面的玩具数据框,以捕捉我的问题。

structure(list(ID = 1:10, Color = structure(c(3L, 3L, 1L, 2L, 
1L, 1L, 3L, 3L, 4L, 2L), .Label = c("blue", "green", "red", "yellow"
), class = "factor"), Type = structure(c(3L, 2L, 1L, 2L, 2L, 
1L, 2L, 3L, 3L, 2L), .Label = c("Both", "Indoor", "Outdoor"), class = "factor"), 
    W1 = c(74.22, 78.59, 45.82, 41.9, 83.44, 97.76, 38.41, 140.68, 
    65.95, 64.46), W2 = c(26.86, 138.8, 41.75, 95.32, 17.57, 
    23.13, 84.81, 93.33, 104.31, 67.66), W3 = c(42.25, 56.37, 
    105.95, 72.64, 82.6, 90.55, 54.55, 122.41, 29.03, 44.09), 
    W4 = c(68.77, 12.67, 58.69, 125.95, 24.33, 34.84, 113.12, 
    10.02, 127.05, 60.3), W5 = c(28.93, 99.35, 126.18, 84.31, 
    138.55, 6.18, 144.63, 99.31, 40.76, 9.42), W6 = c(130.24, 
    149.72, 124.67, 118.97, 102.55, 96.96, 135.88, 38.08, 69.69, 
    120), W7 = c(1.94, 94.22, 12.66, 29.71, 137.53, 116.29, 145.58, 
    40.32, 44.51, 99.16), W8 = c(41.61, 147.42, 40.82, 143.51, 
    114.19, 83.16, 108.72, 86.37, 16.6, 91.13)), .Names = c("ID", 
"Color", "Type", "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8"
), class = "data.frame", row.names = c(NA, -10L))

我想对这些数据做什么是在以W开头的列上循环,它显示不同时间点的值。具体来说,我想说:对于每一列,基于像“大于100”这样的值条件的子集,然后根据该子集汇总定性列(颜色和类型),其中统计数据如每个中的每个分组的计数周。

因此,它涉及将函数应用于每个列,然后使用每个列中的特定子集返回基于两列的摘要统计信息。从广义上讲,我过去曾使用plyr和dplyr软件包对不同群体的数字进行分组和汇总。所以在这种情况下,我可以弄清楚如何在这个df上使用numcolwise(mean)来查看每种颜色的平均值。但我想不出怎么做这种变化。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我不确定我100%理解你想要什么。这是你想要的吗? 在这里,我过滤掉大于100的值的所有周,然后得到颜色和类型组合的计数

library(dplyr)
library(magrittr)
library(tidyr)
gather(df, Week, Value, 4:11) %>%
        filter(Value > 100) %>%
        group_by(Color,Week) %>%
        summarise(Count = n()) %>%
        spread(Week, Count)

宽格式中会有一些NA值表示给定周内没有值