2015-12-27 19 views
1

我是R的新手,並且學習了子集數據的幾種方法。我在使用郵編設置的餐廳數據(RestData)中的下面的匹配數量上存在差異。R中的子集使用%與%返回不同的值與==運算符

> 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") 
+5

你有沒有做過任何搜索?????????? –

+3

你也可以做一些試驗:'x = 1:5; %(c)(1,3); x == c(1,3); x == c(3,1); x == 1; x == 3; x == 1 | X == 3; x [x%in%c(1,3)]; x [x == c(3,1)]'等 – eipi10

+0

我明白你的意思了,謝謝 – Nico

回答

2

,因爲這兩條線都沒有做同樣的你是不是得到相同的答案!如果您想索引RestData的郵政編碼是"21212""21213"的位置,第一個是正確的。有關更多詳細信息,請參見?"%in%"

在第二行中,知道R在二進制操作需要時將「回收」較短向量的元素是很重要的。例如,1:6 + 1:2將回收第二個向量(長度爲2),使其成爲長度爲6的向量,因此您確實可以做到1:6 + rep(1:2, length=6)。在你的情況下,你在做

restData$zipCode == rep(c("21212", "21213"), length=nrow(restData)) 

一個元素的比較是按元素完成的。所以,它告訴你什麼時候奇數位置是"21212"或偶數位置是"21213"。你得到的警告很重要,因爲它告訴你正在比較一個奇數長度的矢量和一個長度均勻的矢量。在某些情況下,回收可能很有用,例如restData$zipCode[c(TRUE, FALSE)]只會檢索奇數位置。

相關問題