我有一个包含多个列的数据框SCC
。从这些列中我想找到所有包含"煤"在他们中间。
我使用grep
函数执行此操作,并使用以下命令将结果存储在变量x
(列表)中:
x <- sapply(SCC, grep, pattern="coal", ignore.case=T)
现在x
告诉我在数据框中的哪个位置&#34;煤&#34;发生时,它是一个列表,下面给出了该列表的第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
还有其他一些单词&#34; coal&#34;在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 :(得分:3)
(回答评论)
你没有做z <- union(x[[4]], x[[9]])
吗?
union
完成这项工作,有没有办法同时对x
的所有元素进行联合?
union()
只需要两个向量;还有另一个函数可以将x
的所有元素作为参数吗?
我们可以简单地做到
unique(unlist(x))
如果您想继续使用union
,请执行:
Reduce(union, x)