大家好我正在分析UCI成人census
数据。数据的每个缺失值都有问号(?
)。
我想用NA
替换所有问号。
我试过了:
library(XML)
census<-read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",header=F,na.strings="?")
names(census)<-c("Age","Workclass","Fnlwght","Education","EducationNum","MaritalStatus","Occupation"
,"Relationship" , "Race","Gender","CapitalGain","CapitalLoss","HoursPerWeek","NativeCountry","Salary" )
table(census$Workclass)
? Federal-gov Local-gov Never-worked Private Self-emp-inc
1836 960 2093 7 22696 1116
Self-emp-not-inc State-gov Without-pay
2541 1298 14
x
<-ifelse(census$Workclass=="?",NA,census$Workclass)
table(x)
x
1 2 3 4 5 6 7 8 9
1836 960 2093 7 22696 1116 2541 1298 14
但它不起作用。
请帮忙。
答案 0 :(得分:8)
以下是在所有列中将" ?"
替换为NA
的简便方法。
# find elements
idx <- census == " ?"
# replace elements with NA
is.na(census) <- idx
它如何运作?
命令idx <- census == " ?"
创建一个逻辑矩阵,其行和列的数量与数据框census
相同。此矩阵idx
包含TRUE
,其中census
在其他位置包含" ?"
和FALSE
。
矩阵idx
用作索引。命令is.na(census) <- idx
用于将census
中位置idx
替换为NA
。
请注意,此处使用了函数is.na<-
。它与is.na
函数不同。
答案 1 :(得分:2)
看看gsub
census$x <- gsub("?",NA,census$x, fixed = TRUE)
编辑:忘记添加fixed = TRUE
正如理查德所指出的那样,这将会发生一切?
答案 2 :(得分:0)
无论出于何种原因,当我将此数据集导入R时,问号都会作为整数读取。
这就是我将所有问号编码为N / A的方法。我敢肯定有更好的方法可以做到这一点,但是我的R技能并不是最出色的,这对我有用。
col_names:
names <- list(
'age','workclass','fnlwgt',
'education','education-num',
'marital-status','occupation',
'relationship','race','sex',
'capital-gain','capital-loss',
'hours-per-week','native-country', 'salary'
)
代码:
# Save csv as variable adult
adult <- read.csv("~/.../adult.data", col.names = names)
for(i in 1:length(adult)) {
matches <- grepl("\\?", adult[ ,i])
for(j in 1:length(matches)) {
ifelse(matches[j] == TRUE, adult[j,i] <- "NA", matches[j])
}
}