数据帧的值替换 - R
我有两个数据帧。数据帧的值替换 - R
一:
>df1 a b c d
W_1 NA NA NA NA
W_2 2 2 2 4
W_3 4 2 2 4
W_4 NA NA NA NA
二:
>df2 a b c d
W_1 TRUE FALSE FALSE FALSE
W_2 FALSE TRUE FALSE TRUE
W_3 TRUE FALSE FALSE TRUE
W_4 FALSE TRUE FALSE TRUE
我要替换第一数据帧与NA,其中在第二个数据帧值FALSE
地方。
输出应该是:
a b c d
W_1 NA NA NA NA
W_2 NA 2 NA 4
W_3 4 NA NA 4
W_4 NA NA NA NA
这是我的代码:
for (i in nrow(df2)) {
for (j in 1:ncol(df2)) {
a = df2[i,j]
if (a == FALSE) {
df1[i,j] = NA
}
}
}
虽然我没有得到任何错误返回,代码也不起作用。第一个数据帧保持不变。任何建议可能是错误的?
感谢您的帮助。
如果行/的df2
比赛的cols准确的df1
的那些,你可以只使用在df2
逻辑值替换要在df1
什么:
df1[!df2] <- NA
@Frank的工作方式同样:
is.na(df1) <- !df2
实施例:
df1 <- data.frame(matrix(1:16, ncol=4))
set.seed(123)
df2 <- data.frame(matrix(sample(c(TRUE, FALSE), 16, replace=TRUE), ncol=4))
df1[!df2] <- NA # or is.na(df1) <- !df2
df1
# X1 X2 X3 X4
#1 1 NA NA NA
#2 NA 6 10 NA
#3 3 NA NA 15
#4 NA NA 12 NA
它给了我一个错误'错误在乐趣(左):无效参数类型',它是什么意思? –
@ bass.bz你可以使用'dput'来给我们的数据结构,否则很难说出发生了什么 – Cath
我们可以高效set
从data.table
library(data.table)
setDT(df1)
for(j in seq_along(df1)){
set(df1, i = which(!df2[[j]]), j=j, value = NA)
}
df1
# a b c d
#1: NA NA NA NA
#2: NA 2 NA 4
#3: 4 NA NA 4
#4: NA NA NA NA
做到这一点作为@Frank在评论中提到的,它也将工作,无须转换为data.table
for(j in seq_along(df1)){
set(df1, i = which(!df2[[j]]), j=j, value = NA)
}
df1
# a b c d
#W_1 NA NA NA NA
#W_2 NA 2 NA 4
#W_3 4 NA NA 4
#W_4 NA NA NA NA
只有当两个数据帧中的行数相同时,它才有效? –
@ bass.bz是的,它基于你的例子。如果不一样,不确定你想要替换值的逻辑 – akrun
'DF1 [!DF2] Cath
或者像'is.na(df1) Frank
@quant比较'FALSE ==“FALSE”'和'“FALSE”==“FALSE''。强制节省时间。 – Frank