如何计算data.frame的每个单元格相对于第二个data.frame的相对频率?

时间:2015-04-28 14:26:50

标签: r plyr dplyr

[...] 如何计算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完成?

1 个答案:

答案 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

中共享的年份