我在数据框中有我的数据,如下所示:
someName someID 1 2 3
A 1 T7(P),M6(O),S6(P) T7(P),M6(O),S6(P) T7(P),M6(O),S6(P),S7(P)
B 2 S4(P) S4(P) NA
C 3 S1(P),Q9(D) S1(P),Q9(D) S16(P),Q9(D)
D 4 S5(P),C7(C),S4(P) S4(P),C7(C),S4(P) S5(P),C7(C),S14(P)
E 5 S18(P) S18(P) S18(P)
F 6 S1(P) NA S1(P)
L 8 Z1(P) NA NA
Z 9 NA NA Q100(P)
我想阅读我的每一行df1
并找到拆分元素的完全匹配并计算它们。cbind
然后在我的新列中显示总计df1
。
例如,在 row 中someName=A
,我想用逗号分割第 1,2,3 列中的字符串,并查找T7(P)
在所有 3 中都找到的字符串,因此总和为 3。所以是S6(P)
。所以总数3+3=6
为row A
. (S7(P)
被忽略,因为它在任何其他列中都找不到)。
我想忽略没有 的任何其他项目(P)
,因此M6(O)
被忽略。
Row L
总共为 0,因为它不与任何其他列相交。
所以我可以使用该apply
函数逐行然后将列拆分,
那么我怎样才能在分割值之间进行交叉或匹配呢?
我dput(df1)
的是:
structure(list(someName = structure(1:8, .Label = c("A", "B",
"C", "D", "E", "F", "L", "Z"), class = "factor"), someID = c(1L,
2L, 3L, 4L, 5L, 6L, 8L, 9L), `1` = c("T7(P),M6(O),S6(P)", "S4(P)",
"S1(P),Q9(D)", "S5(P),C7(C),S4(P)", "S18(P)", "S1(P)", "Z1(P)",
NA), `2` = c("T7(P),M6(O),S6(P)", "S4(P)", "S1(P),Q9(D)", "S4(P),C7(C),S4(P)",
"S18(P)", NA, NA, NA), `3` = c("T7(P),M6(O),S6(P),S7(P)", NA,
"S16(P),Q9(D)", "S5(P),C7(C),S14(P)", "S18(P)", "S1(P)", NA,
"Q100(P)")), .Names = c("someName", "someID", "1", "2", "3"), row.names = c(NA,
-8L), class = "data.frame")