我正在使用ggplot2软件包中的数据集txhousing,并添加了一列来检查中值的相对性能。
a <- summary(txhousing$median)
txhousing$cat <- ifelse(txhousing$median > a[which(names(a) == "Median")], "Hi", "Lo")
我只想检查归类为Lo的数据点的数量,并为此编写代码
b <- 0
for (i in 1:nrow(txhousing)) {
if (txhousing$cat[i] == "Lo") {
b <- b + 1
}
}
但是我遇到了错误
if(txhousing $ cat [i] ==“ Lo”){ 缺少需要TRUE / FALSE的值
我在做什么错了?
答案 0 :(得分:0)
如果我正确理解了您的问题,您要做的就是
sum(txhousing$cat == "Lo", na.rm= TRUE)
3995
这将告诉您“有多少个数据点被分类为Lo”。如果您想同时了解Lo和Hi,就可以
table(txhousing$cat)
答案 1 :(得分:0)
正如其他人指出的那样,问题是NA
s。
在循环中,您至少可以通过两种方法解决此问题。
1:添加另一个条件,以便如果cat[i]
不是NA
并且cat[i]
是Lo
,则递增。
2:将条件包装在isTRUE()
中,如果TRUE
则返回TRUE
,否则返回FALSE
,没有NA
。
b <- 0
for (i in 1:nrow(txhousing)) {
if (!is.na(txhousing$cat[i]) & txhousing$cat[i] == "Lo") {
b <- b + 1
}
}
b <- 0
for (i in 1:nrow(txhousing)) {
if (isTRUE(txhousing$cat[i] == "Lo")) {
b <- b + 1
}
}
schwantke当然是正确的,因为在相关列上加和是更可取的,并且应该考虑使用table()
。
然而,table()
的真正优势在于您想要组合级别。假设您想知道每年或每个城市的Lo
和Hi
的数量
(tab.y <- with(txhousing, table(year, cat)))
(tab.c <- with(txhousing, table(city, cat)))
margin.table(tab.y, margin=2)
cat
Hi Lo
3991 3995