在R中用NA替换值

sop*_*fic 2 r sum na

我有一个字符向量,看起来像:

"Internet" "Internet" "-1"       "-5"       "Internet" "Internet" 
Run Code Online (Sandbox Code Playgroud)

我想替换所有可能是负数值(-1,-5等)的NA.

我用这段代码做到了:

hintsData$WhereSeekHealthInfo[hintsData$WhereSeekHealthInfo < 0] <- NA
Run Code Online (Sandbox Code Playgroud)

这似乎有效:

head(hintsData$WhereSeekHealthInfo)
# [1] "Internet" "Internet" NA         NA         "Internet" "Internet"
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] NA
Run Code Online (Sandbox Code Playgroud)

基本上我不能再将这些值相加,因为我以某种方式改变了矢量?

在运行NA代码之前,我能够运行代码并获得:

> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] 1691
Run Code Online (Sandbox Code Playgroud)

那么,如何用NA替换"-1"," - 5"等值,但仍然得到:

> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] 1691
Run Code Online (Sandbox Code Playgroud)

如果您有任何想法,请告诉我.我确实找到了关于用NA替换的其他问题但是因为我不知道为什么一旦我用NA替换我就不能再计算值了我不知道要搜索什么或排除.

mne*_*nel 5

sum有一个na.rm参数,设置为TRUE,你将删除NA.(一般情况下,1+NA = NA您要删除NA值)

话虽如此,<0鉴于您的矢量是字符(在这种情况下它确实起作用,但我不想假设它很健壮),您对于您的情况略微偷偷摸摸

设置NA值的惯用方法R是使用is.na<-,例如

is.na(hintsData$WhereSeekHealthInfo) <- hintsData$WhereSeekHealthInfo <0
Run Code Online (Sandbox Code Playgroud)

根据您在数据中的读取方式,您可以将其设置为处理您的信息

例如,如果您在阅读文本文件之前知道有效的响应,则可以创建自己的类

 setAs("character","Q1", function(from) factor(from ,levels = c('Internet','Newspaper'))

 read.csv('mytextfile.csv', colClasses = list(WhereSeekHealthInfo = 'Q1')
Run Code Online (Sandbox Code Playgroud)

或许(更明确地看待NA值,而不是明确有效值是什么.

  setAs("character","Q1b", function(from) {is.na(from) <- suppressWarnings(as.numeric(from)) <0;from})
Run Code Online (Sandbox Code Playgroud)