我有一个字符向量,看起来像:
"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替换我就不能再计算值了我不知道要搜索什么或排除.
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)