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