我想将两个数据框和特定列中的值设置为null,如果减去结果为负值。
例如,如果我有df1和df2,如下所示:
df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8))
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3))
我有一个列名矢量:
v <- c('v1', 'v3')
使用以下减法的结果:
df2[,v]-df1[,v] < 0
v1 v3
FALSE FALSE
TRUE TRUE
FALSE TRUE
TRUE FALSE
FALSE TRUE
我想将df1和df2中的值设置为null,如果它们为真。
预期结果:
DF1:
v1 v2 v3
3 8 7
NA 6 NA
4 7 NA
NA 3 5
4 5 NA
DF2:
v1 v2 v3
5 1 7
NA 1 NA
8 7 NA
NA 4 5
9 5 NA
感谢。
答案 0 :(得分:0)
这是你提供的:
df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8))
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3))
v <- c('v1', 'v3')
现在将df2[,v] - df1[,v]
的结果保存在df3
# intermediate step:
df3 <- df2[,v]-df1[,v]
将df3
中的所有正值替换为0
(或任何值)
df3[df3 > 0] <- 0
df3
修改:
如果您想要替换df1
和df2
中的值,请使用df3 > 0
对其进行索引:
df1[df3 > 0] <- 0 # or some other value than 0
df2[df3 > 0] <- 0 # or some other value than 0
答案 1 :(得分:0)
如果我理解你的问题,我会得到以下信息:
df1 <- cbind(v1=c(3,6,4,8,4), v2=c(8,6,7,3,5), v3=c(7,6,8,5,8))
df2 <- cbind(v1=c(5,3,8,7,9), v2=c(1,1,7,4,5), v3=c(7,1,2,5,3))
v <- c('v1', 'v3')
ifelse(df2[,v] - df1[,v]<0,NA,df2[,v]-df1[,v])
如果使用ifelse函数如下...如果减法小于0,则答案为NA,否则(否则)是减法的结果。此代码导致
v1 v3
[1,] 2 0
[2,] NA NA
[3,] 4 NA
[4,] NA 0
[5,] 5 NA
答案 2 :(得分:0)
我能够通过计算子集v的差异并使用结果替换df1和df2中的子集v值来实现这一点:
df3 <- df1[,v]-df2[,v]
df1[,v][df3<0] <- NA
df2[,v][df3<0] <- NA