【发布时间】:2014-12-17 15:02:12
【问题描述】:
我有一个长格式的数据集,但我似乎无法将其用于分析。也许这个形状是合适的——我的经验几乎完全是宽格式数据,所以这个数据文件对我来说没有意义。 (可复制的数据文件在帖子末尾。)
> head(df,10)
ID attributes values
1 1 AU AAA
2 1 AU BBB
3 1 YR 2014
4 2 AU CCC
5 2 AU DDD
6 2 AU EEE
7 2 AU FFF
8 2 AU GGG
9 2 YR 2013
10 3 AU HHH
属性列包含我感兴趣的变量,我想执行一系列聚合函数。例如,我想:
1.获取每个 ID 的作者数 (AU)。例如:
ID N.AU
1 2
2 5
3 1
4 2
5 5
6 1
-
按年份 (YR) 计算作者的中位数 (AU)
YR Median.N.AU 2013 5.0 2014 1.5
对于这两个示例,我已经尝试使用 group_by 和 summaries 进行 dplry,但还没有破解代码。我也试过dcast。我希望提出一个解决方案,我可以轻松地将其推广到更大的数据框,该数据框具有更多的属性,可以采用单个值或多个值。任何帮助或指向类似解决方案的指针将不胜感激。
attributes = c("AU", "AU", "YR", "AU", "AU", "AU", "AU", "AU", "YR", "AU", "YR",
"AU", "AU", "YR", "AU", "AU", "AU", "AU", "AU", "YR", "AU", "YR")
ID = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6)
values = c("AAA", "BBB", "2014", "CCC", "DDD", "EEE", "FFF", "GGG", "2013", "HHH", "2014",
"III", "JJJ", "2014", "KKK", "LLL", "MMM", "NNN", "OOO", "2013", "PPP", "2014")
df <- data.frame(ID, attributes, values)
【问题讨论】:
-
(1) 的基本解决方案可能类似于
aggregate(attributes ~ ID, data = df[df$attributes == "AU", ], FUN = length),dplyr 版本可能类似于df %>% filter(attributes == "AU") %>% group_by(ID) %>% summarise(N.AU = length(attributes))。YR列似乎不见了 (?)。 -
@lukeA 我几乎在 dplyr 版本中获得了正确的代码,非常感谢!
YR是我正在努力解决的问题。那是在数据文件中作为列中的变量,这就是给我带来问题的原因! -
不知道为什么这个问题得到了几票反对?
-
这就是我想知道的!我会尝试通过反馈来改进我的问题......到目前为止,我收到的帮助对我的特殊需求非常有帮助。
-
我认为你的中位数计算是错误的