【发布时间】:2025-12-14 19:55:01
【问题描述】:
我在数据框中有一个我的数据,如下所示:
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。
例如在行 someName=A 中,我想用逗号分割第 1,2,3 列中的字符串并查找在所有 3 中都找到的 T7(P),因此总和为 3。@987654327 也是@。所以对于row A,总数将是3+3=6。 (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")
【问题讨论】: