R计数数据帧中特定字符串的数量

时间:2015-01-25 18:32:49

标签: r string

对不起初学者的问题。

我有一个数据框(我想,如果我在这里错了,请纠正我。)

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中的字符串?

2 个答案:

答案 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 == " ?")

现在我看到它,首先正确读取数据显然是更好的方法。我只是添加了这个来展示当我的“眼球技术”让我失望时我用来寻找字符串数据问题的一种方式。