2016-12-30 64 views
2

我有一個數據框SCC有幾列。從這些專欄中,我想找到所有在其中都有「煤」字的行。合併列表中的所有元素並僅保留唯一值

我使用grep功能用下面的命令做變量x(列表),以便和存儲的結果:

x <- sapply(SCC, grep, pattern="coal", ignore.case=T) 

現在x告訴我在哪裏,在數據幀中的單詞「煤」的發生,它是一個列表,這個列表的第4和第9個元素在下面給出。

> x[4] 
$EI.Sector 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
[17] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 80 81 
[33] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 
[49] 99 100 101 102 103 104 105 106 107 108 109 110 111 112 161 162 
[65] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 
[81] 179 180 181 182 183 184 185 215 221 433 434 435 447 448 462 463 
[97] 527 528 529 

> x[9] 
$SCC.Level.Three 
    [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 
[14] 14 15 16 17 18 19 20 21 79 80 81 83 84 
[27] 85 86 87 88 89 90 91 92 93 94 95 96 97 
[40] 98 99 100 101 102 103 104 105 161 162 163 164 165 
[53] 166 167 168 169 170 171 172 173 174 175 176 177 178 
[66] 179 180 242 433 434 435 447 448 462 463 477 478 527 
[79] 528 529 2220 2221 2222 2223 2224 2496 2497 2498 2499 2500 2501 
[92] 2502 2503 2504 2505 2506 2591 2592 4520 4673 4674 4675 4676 4677 
[105] 4678 4679 4680 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 
[118] 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 
[131] 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 
[144] 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7991 
[157] 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 
[170] 8005 8006 8007 8008 8009 9054 9055 9056 9057 9058 9059 9060 

問題1

我想x[4]x[9]合併成一個指數;我應該如何繼續?我現在正在使用下面的代碼,但有一個更簡潔的命令?

y <- x[[4]] %in% intersect(x[[4]], x[[9]]) 
z <- c(x[[4]][!y], x[[9]]) 

> sort(z) 
    [1] 1 2 3 4 5 6 7 8 9 10 11 12 
[13] 13 14 15 16 17 18 19 20 21 22 23 24 
[25] 25 26 27 28 29 30 79 80 81 83 84 85 
[37] 86 87 88 89 90 91 92 93 94 95 96 97 
[49] 98 99 100 101 102 103 104 105 106 107 108 109 
[61] 110 111 112 161 162 163 164 165 166 167 168 169 
[73] 170 171 172 173 174 175 176 177 178 179 180 181 
[85] 182 183 184 185 215 221 242 433 434 435 447 448 
[97] 462 463 477 478 527 528 529 2220 2221 2222 2223 2224 
[109] 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2591 
[121] 2592 4520 4673 4674 4675 4676 4677 4678 4679 4680 7415 7416 
[133] 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 
[145] 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 
[157] 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 
[169] 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7991 7992 
[181] 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 
[193] 8005 8006 8007 8008 8009 9054 9055 9056 9057 9058 9059 9060 

問題2

還有其他列在SCC 「煤」 字。 x元素的長度爲我們提供了在SCC中使用「煤」這個詞的位置。是否有單個命令來合併x的所有元素以生成行索引?

sapply(x, NROW) 
       SCC  Data.Category   Short.Name 
        0     0     239 
      EI.Sector  Option.Group   Option.Set 
       99     0     0 
     SCC.Level.One  SCC.Level.Two  SCC.Level.Three 
        0     0     181 
    SCC.Level.Four    Map.To Last.Inventory.Year 
       126     0     0 
     Created_Date  Revised_Date   Usage.Notes 
        0     0     0 
+0

工會不工作,有沒有辦法做到在聯盟所有x的元素同時?謝謝 – Bhail

+0

所有這些。 union()僅用於向量,是否有另一個函數可以用作參數x的所有元素? – Bhail

回答

3

(作出評論到答案)

你不這樣做z <- union(x[[4]], x[[9]])

union沒有工作,有沒有辦法做到的x同時所有的元素工會嗎?

union()只需要兩個向量;是否有另一個函數可以作爲參數x的所有元素?

我們可以簡單地做

unique(unlist(x)) 

如果你想留在使用union,做到:

Reduce(union, x) 
相關問題