我想在列'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)
答案 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