对不起初学者的问题。
我有一个数据框(我想,如果我在这里错了,请纠正我。)
data <- read.csv("adult.data", sep=',', header=F)
数据为https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data
当数据丢失时,它只有“?”而不是数据。我需要计算每列中缺少多少数据。
我可以计算一个数字的实例,但不能计算字符串。
Col 1是年龄,所以我可以这样做:
length(which(data[,1] == 55))
它会告诉我这个数据集中有多少人55岁。
但如果我尝试
length(which(data[,2] == "?"))
它说0。
如何比较R中的字符串?
答案 0 :(得分:4)
看起来如果您使用na.strings = "?"
和strip.white = TRUE
再次阅读,您将获得正确的NA
值,并且能够使用is.na()
df <- read.csv(
"http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",
header = FALSE,
na.strings = "?",
strip.white = TRUE
)
## total NA in the data
sum(is.na(df))
# [1] 4262
## total NA for column 2
sum(is.na(df[[2]]))
# [1] 1836
## count NA by column
colSums(is.na(df))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
# 0 1836 0 0 0 0 1843 0 0 0 0 0 0 583 0
答案 1 :(得分:1)
上面的那些回答者足够敏锐,能够“逐眼”发现问题。我走了步行路线:
unique(grep("\\?", df[,2], value = TRUE))
告诉我问题是每个问号前面的空格。不记得na.strings和strip.whitespace选项,(感谢提醒!)我只是:
colSums(df == " ?")
现在我看到它,首先正确读取数据显然是更好的方法。我只是添加了这个来展示当我的“眼球技术”让我失望时我用来寻找字符串数据问题的一种方式。