2017-04-15 45 views
2

時爲什麼,下列返回我「TRUE」在%沒有匹配%使用data.table

ifelse(13 %in% 1:13, TRUE, FALSE) 
[1] TRUE 

及以下(對我來說或多或少相同)返回「FALSE」

TestData <- as.data.table(1:13) 
ifelse(13 %in% TestData[1:13, "V1"], TRUE, FALSE) 
[1] FALSE 

回答

4

我們需要提取列作爲vector

13 %in% TestData[1:13][["V1"]] 
#[1] TRUE 

在OP的代碼中,TestData[1:13, "V1"]仍然是單列的data.table。在ifelse作品上vector作爲data.table/data.framelist與某些屬性

13 %in% TestData[1:13, "V1"] 
#[1] FALSE 

13 %in% list(1:13) 
#[1] FALSE 

另外,作爲所述@Frank,子集劃分的不需要在這種情況下的作爲ifelse%in%的輸出爲邏輯矢量

列第一的向量會更有效

13 %in% TestData[["V1"]][1:13] 
+1

清除。感謝您的解釋! – Sven

+1

由於'TestData [1:13]'產生了一個包含所有數據的子集,所以'TestData [[V1]] [1:13]'或者甚至TestData [1:13,V1]列。 – Frank

3

隨着data.table通常要放在表達210的位置。

TestData[1:13, 13 %in% V1]