2015-11-17 38 views
0

的我有一個數據表,dt適用於數據表功能的條件去除

  V1      V2    V3 PubMedCounts 
1: 0000100005    100-00-5  CAS Number    6 
2: 0000100005 1-Chloro-4-nitrobenzene DescriptorName    12 
3: 0000100005     aahs DescriptorName   111 
4: 0000100005     PNCB  Synonym    35 

另外,我有一個數據表,ew,它只有一個文字列,如:

  V1 
1:  aah 
2:  aahed 
3: aahing 
4:  aahs 
5: aardvark 

dt數據表,我需要除去所有具有V2尺寸小於或等於5或存在於ew數據表的行。

例如,從dt表,我會刪除第3和第4行。

我想用應用功能,使之有效,因爲它相當大的數據集

+0

爲什麼第4行刪除?因爲'「PNCB」<5'? –

+0

是的,這就是正確的 – user1631306

+0

所以,你的意思是你想刪除字符數爲4或更少的字符? –

回答

2

如果我理解正確的話,我會做:

dt[!ew, on = c(V2 = "V1")][nchar(V2) > 5] 

這給:

 V1      V2    V3 PubMedCounts 
1: 100005    100-00-5  CAS_Number   6 
2: 100005 1-Chloro-4-nitrobenzene DescriptorName   12 

以其他順序應用條件可能會更快:

dt[nchar(V2) > 5][!ew, on = c(V2 = "V1")] 

這樣可以防止在dt中匹配下一步將要刪除的內容。

第三種可能性是使用:

dt[nchar(V2) > 5 & !(V2 %chin% ew$V1)] 

使用的數據

dt <- structure(list(V1 = c(100005L, 100005L, 100005L, 100005L), V2 = c("100-00-5", 
"1-Chloro-4-nitrobenzene", "aahs", "PNCB"), V3 = c("CAS_Number", 
"DescriptorName", "DescriptorName", "Synonym"), PubMedCounts = c(6L, 
12L, 111L, 35L)), .Names = c("V1", "V2", "V3", "PubMedCounts" 
), row.names = c(NA, -4L), class = c("data.table", "data.frame")) 

ew <- structure(list(V1 = c("aah", "aahed", "aahing", "aahs", "aardvark")), .Names = "V1", row.names = c(NA, -5L), class = c("data.table", "data.frame")) 
+0

感謝@Frank&'@ Jaap',我一直在運行,無法自己創建示例來測試。 – MichaelChirico