如何根据数据框的两列中的相同值进行计算列表?

时间:2016-10-25 10:20:47

标签: r dataframe

我想在列'var2'中扫描出现在另一列'var1'中的元素,并且在它们匹配的情况下,找到比例'value2'/'value1',具体取决于列'type'的级别。所需的输出将是列表或数据框。

var1<- c(8, 1, 1, 2, 3, 1, 4, 5, 2, 6, 1, 3, 7)
var2 <- c(NA,8,NA,NA,NA,3,NA,NA,5,NA,6,6,NA)
value1 <- c(4340,   NA, 3740, 3825, 3845,   NA, 4005, 2660,   NA, 3055,   NA,   NA, 5800)
value2 <- c(NA, 30, NA, NA, NA,  5, NA, NA, 15, NA,  1, 20, NA)
type <- c('Fish','Crab','Fish','Fish','Fish','Bird','Fish','Fish','Bird','Fish','Bird','Crab','Fish')
df <- data.frame(var1,var2,value1,value2,type)

1 个答案:

答案 0 :(得分:1)

感谢@Veerendra Gadekar在评论中提出解决方案。

lapply(split(df, df$var2), 
  function(x) 
   c(x$value2/df$value1[df$var1 == unique(x$var2) & !is.na(df$value1)])
 )

#$`3`
#[1] 0.00130039
#
#$`5`
#[1] 0.005639098
#
#$`6`
#[1] 0.0003273322 0.0065466448
#
#$`8`
#[1] 0.006912442