[英]replacing values in dataframe with another dataframe r
我有一个表示折倍变化的值的数据框,例如:
> df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4))
A B C
1 1.74 1.50 1.10
2 -1.30 0.90 3.01
3 3.10 0.71 1.40
这样的pvalue数据框可以完全匹配行和列:
> df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03))
A B C
1 0.02 NA 0.01
2 0.01 0.01 0.01
3 0.80 0.06 0.03
我想要的是修改df1中的值,以便仅保留df2 <.05中具有对应pvalue的值,否则替换为NA。 请注意,df2中也有NA。
> desired <- data.frame(A=c(1.74,-1.3,NA), B=c(NA,.9,NA), C=c(1.1,3.01,1.4))
> desired
A B C
1 1.74 NA 1.10
2 -1.30 0.9 3.01
3 NA NA 1.40
我首先尝试在这些数据帧上使用向量语法,但没有用。 然后我尝试了按列进行for循环,但也失败了。
我不认为我了解如何索引每个i,j位置,然后基于逻辑将df1值替换为df2值。
或者如果在R中有更好的方法。
您可以尝试以下方法:
df1[!df2 < 0.05 | is.na(df2)] <- NA
出:
> df1
A B C
1 1.74 NA 1.10
2 -1.30 0.9 3.01
3 NA NA 1.40
ifelse
和as.matrix
似乎可以解决问题。
df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4))
df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03))
x1 <- as.matrix(df1)
x2 <- as.matrix(df2)
as.data.frame( ifelse( x2 >= 0.05 | is.na(x2), NA, x1) )
结果
A B C
1 1.74 NA 1.10
2 -1.30 0.9 3.01
3 NA NA 1.40
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.