根据R中另一数据框的条件值匹配/子集一个数据框

时间:2019-10-23 20:57:02

标签: 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中将所有列的值保持在df1中的<= 0.8,而在那些> 0.8的列中将NA保留在值中

我试图在df2中查找并替换> 0.8的值:

df2[df2 >= 0.8] <- NA

然后,我尝试用df2中的NA替换df1中的所有匹配值,但是类似下面的脚本的内容希望列不是数据帧:

df1[match(df1, df2==NA)] 

我希望最终的数据帧看起来像这样:

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

2 个答案:

答案 0 :(得分:4)

像这样使用df.groupby('Timestamp', as_index=False).first() Timestamp A B C 0 00:00:00 95.30 1.66 15.67 1 00:10:00 96.55 22.67 5.44

mapply

as.data.frame(mapply(function(x, y) ifelse(y <= 0.8, x, NA), df1, df2))

答案 1 :(得分:3)

我们可以根据逻辑矩阵直接分配NA

 NA^(df2 > 0.8) * df1

`is.na<-`(df1, df2 > 0.8)