[英]Match/subset one dataframe based on conditional values in another dataframe in R
我有兩個數據框:
df1=data.frame(A=c(1,2,4,8), B=c(4,3,2,9), C=c(10,11,1,2), D=c(12,40,3,4))
df2=data.frame(A=c(0.5,2.0,0.1,0.3), B=c(1.5,0.5,0.2,0.1), C=c(3.0,1.25,0.5,0.2), D=c(0.7,0.8,0.2,2.0))
我想在 df1 中為所有列保留 <= 0.8 的值,在 > 0.8 的列中保留NA
我試圖在 df2 中查找和替換 > 0.8 的值:
df2[df2 >= 0.8] <- NA
然后我嘗試用 df2 中的NA
替換 df1 中的所有匹配值,但類似於下面的腳本需要列而不是數據框:
df1[match(df1, df2==NA)]
我希望最終的 dataframe 看起來像這樣:
df3=data.frame(A=c(1,NA,4,8), B=c(NA,3,2,9), C=c(NA,NA,1,2), D=c(12,40,3,NA))
TIA
像這樣使用mapply
:
as.data.frame(mapply(function(x, y) ifelse(y <= 0.8, x, NA), df1, df2))
或者
replace(df1, df2 > 0.8, NA)
我們可以根據邏輯矩陣直接分配NA
NA^(df2 > 0.8) * df1
或者
`is.na<-`(df1, df2 > 0.8)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.