【发布时间】:2018-08-03 15:52:15
【问题描述】:
我有一个这样的 DF:
ID_A <- c(NA,NA,132,NA,NA,NA,248,NA)
ID_B <- c(132,248,248,381,248,290,290,132)
entry <- c(1,2,2,3,4,5,5,6)
df <- data.frame(ID_A,ID_B,entry)
我希望添加一个如下所示的结果列:
df$result <- c(NA,NA,1,NA,NA,NA,4,NA)
对于每一行,如果ID_A不是NA,我想在entry col中找到对应的值:1)ID_A匹配ID_B,2)ID_A的entry列是不大于entry值的最大值对于我们在 ID_B 中匹配的 ID_A 行。
我的尝试,感觉可能很接近,但目前找不到正确的值:
df$result <- ifelse(is.na(df$ID_A),NA,df$entry[match(df$ID_A,df$ID_B) & !duplicated(df$ID_B,fromLast = TRUE)])
【问题讨论】:
-
措辞非常混乱,但我想我明白你想说的话。您如何处理重复值? ID_A 中的 132 值可以映射到 1 或 6,如果您没有指定您想要第一个可能的值
-
这有
merge(或dplyr::*_join)的气质,如果不是因为@FelipeFlores 突出显示的傻瓜。
标签: r