[...]
如何计算data_foobar
的每个单元格的相对频率,与data_baseline
(= 100%)相关?两者都包含按年份排列的文章绝对数量,但data_foobar
仅包含值为&gt的年份; 0
样本数据(已更新):
data_baseline <- structure(list(Year = 2010:2014, `Area Studies` = c(3636L, 4247L,
3922L, 2050L, 201L), Arts = c(2082L, 1993L, 1859L, 974L, 87L)), .Names = c("Year",
"Area Studies", "Arts"), row.names = 111:115, class = "data.frame")
data_foobar <- structure(list(Year = 2011:2014, `Area Studies` = c(1L, 2L, 2L,
NA), Arts = c(5L, 8L, 3L, NA)), .Names = c("Year", "Area Studies",
"Arts"), row.names = c("58", "59", "60", "61"), class = "data.frame")
如何使用plyr / dplyr完成?
答案 0 :(得分:4)
会给你(以百分比形式)data_foobar&#34;的相对频率。 [-1]从元素分割操作中删除Year col
> cbind(data_foobar[1], 100*data_foobar[-1]/data_baseline[-1])
Year Area Studies Arts
57 2010 0.02750275 0.2881844
58 2011 0.02354603 0.2508781
59 2012 0.05099439 0.4303389
60 2013 0.09756098 0.3080082
61 2014 NA NA
如果您的数据不是这样的话,那么&#34;常规&#34;并且您可能需要使用intersect(names(data_baseline), names(data_foobar) )[-1]
作为列选择器向量来匹配列名称。
对于修改后的问题:
cbind(data_foobar[1],
100*data_foobar[ data_foobar$Year %in% data_baseline$Year, -1]/
data_baseline[ data_foobar$Year %in% data_baseline$Year, -1 ])
Year Area Studies Arts
57 2010 0.02750275 0.2881844
58 2011 0.02354603 0.2508781
59 2012 0.05099439 0.4303389
60 2013 0.09756098 0.3080082
61 2014 NA NA
使用逻辑索引仅选择两个Year-columns
中共享的年份