我是R的新手,并学习了几种分组数据的方法。我很困惑,在邮政编码设置的餐厅数据(RestData)中使用以下匹配数量的差异。
> nrow(restData[restData$zipCode %in% c("21212","21213"),])
# [1] 59
> nrow(restData[restData$zipCode == c("21212","21213"),])
# [1] 26
>Warning message:
In restData$zipCode == c("21212", "21213") :
longer object length is not a multiple of shorter object length
我正在使用以下数据集,以防您想要复制
fileURL <- "https://data.baltimorecity.gov/api/views/k5ry-ef3g/rows.csv?accessType=DOWNLOAD"
download.file(fileURL, destfile = "./Rdata/restaurants.csv", method = "curl")
restData <- read.csv("./Rdata/restaurants.csv")
答案 0 :(得分:2)
你没有得到相同的答案,因为两条线都没有做同样的事情!如果您要对邮政编码为RestData
或"21212"
的{{1}}的排名进行索引,则第一个是正确的。有关详细信息,请参阅"21213"
。
在第二行中,重要的是要知道R将在二进制操作需要时“回收”较短向量的元素。例如,?"%in%"
将循环第二个向量(长度为2)以使其成为长度为6的向量,因此您确实1:6 + 1:2
。在你的情况下,你正在做
1:6 + rep(1:2, length=6)
比较是逐个元素完成的。所以,它告诉你奇数位置是restData$zipCode == rep(c("21212", "21213"), length=nrow(restData))
还是偶数位置是"21212"
。你得到的警告很重要,因为它告诉你将奇数长度的矢量与偶数长度的矢量进行比较。在某些情况下,回收可能很有用,例如"21213"
将仅检索奇数位置。