R 使用NAs替换数据帧中的值时出错

R 使用NAs替换数据帧中的值时出错,r,dataframe,na,R,Dataframe,Na,假设我有这个数据帧z: x <- c("NS","NS",NA) y <- c("yes","yes","b") z <- as.data.frame(cbind(x,y), stringsAsFactors=FALSE) > z x y 1 NS yes 2 NS yes 3 <NA> b 因为出于某种原因,我得到了带有NA的数据帧,即使我只使用了“NS”的子集。如果删除NA,则会出现另一个错误: na.omit(z[z$x=

假设我有这个数据帧
z

x <- c("NS","NS",NA) 
y <- c("yes","yes","b") 
z <- as.data.frame(cbind(x,y), stringsAsFactors=FALSE)

> z
     x   y
1   NS yes
2   NS yes
3 <NA>  b
因为出于某种原因,我得到了带有NA的数据帧,即使我只使用了
“NS”
的子集。如果删除
NA
,则会出现另一个错误:

na.omit(z[z$x=="NS","a"])<-"no"
Error in na.omit(z[z$x == "NS", "a"]) <- "no" : 
  could not find function "na.omit<-"

na.omit(z[z$x==“NS”,“a”])简而言之,我会使用:

x <- c("NS","NS",NA) 
y <- c("yes","yes","b") 
z <- as.data.frame(cbind(x,y))

z[, c('y')] <- ifelse(y == 'yes', 'a', y)

x第一个问题是正确指定变量名,即使用名称而不是值(可能只是问题中的一个输入错误):
“y”
而不是
“yes”

然后,当您使用
==
并试图思考如何处理第三行中的
NA
时,会出现另一个问题:

x=="NS"
[1] TRUE TRUE   NA
嗯,应该保留还是不保留?它既不是
TRUE
也不是
FALSE
。。。所以它只是给出了一个错误,因为它无法“决定”

使用%
中的
%(实际上是
匹配(x,table,nomatch=0)
),我们得到:

这样,
NA
与值“NS”
不匹配,因此它返回0,或者在
逻辑中,
FALSE
:我们不应该保留它

因此,为了得到你想要的:

z[z$x %in% "NS", "y"] <- "a"
z
#     x y
#1   NS a
#2   NS a
#3 <NA> b
z[z$x%in%“NS”,“y”]为什么不这么简单:

z[!is.na(z$x=="NS") & z$y=="yes", "y"] <- "a"

#      x y
# 1   NS a
# 2   NS a
# 3 <NA> b

z[!is.na(z$x==“NS”)&z$y==“yes”,“y”]可能
z[z$x==“NS”,“y”]“y”是一列的名称,“yes”不是
z[z$x%in%“NS”,“y”],因为%in%“忽略了”na,而
=
对如何处理它感到困惑;-)由于我完全无法根据您试图实现的目标对任何答案进行投票,您能否澄清这一点:您希望只对
x
列值进行筛选,还是同时对
x==“NS”
y==“yes”进行筛选
?实际上,问题出在
x
NS
的行上,但他的问题在标题中陈述了:
用NAs替换数据帧中的值时出错
,所以OP想知道如何处理好,我仍然不认为
z$y==“是”
是正确的条件,如果是,则绝对没有理由在
x
中检查
NA
…这在
z中失败,总之
is.NA(z$x==“NS”)
is.NA(z$x)
完全相同。所以我的答案是错误的。要从
z$x==“NS”
中获得预期的行为,您应该!is.na与它一起:
!is.na(z$x==“NS”)&z$x==“NS”
。(抱歉编辑太多,遗漏了部分)实际上问题在
x
NS
的行上……对于
z@m0h3n,这失败是什么意思?OP的问题在于处理
NA
基本上,当您似乎依赖OP“单词”来找到将
y
值转换为
“a”
的条件时,我依赖OP的代码。现在,没有人知道哪一个是真实的情况,但实际上,这不是这个问题的主题。。。(如果条件的值是
y
well OP不会有任何NA问题开始…)我宁愿将判断权留给其他用户。@m0h3n实际上,这更需要OP的澄清,但无论如何
z[z$x %in% "NS", "y"] <- "a"
z
#     x y
#1   NS a
#2   NS a
#3 <NA> b
z[!is.na(z$x=="NS") & z$y=="yes", "y"] <- "a"

#      x y
# 1   NS a
# 2   NS a
# 3 <NA> b