我有一个tibble,每行对应一个带ID的样本,每个样本将有多个类别和值。我想列出两个或更多类别的值相互匹配的ID对。
# A tibble: 3 x 2
ID data
<chr> <list>
1 ID1 <tibble [1 x 3]>
2 ID2 <tibble [1 x 3]>
3 ID3 <tibble [1 x 3]>
我可以使用sum(match(x$data[[i]], x$data[[j]], nomatch=0)>0)
来获取两行之间的匹配计数。
我可以通过将match()
放在 i 和< i>j 循环中来得出答案。是否有更好的方法(使用tidyverse
)来得到答案?
谢谢。
例如,这里是原始数据框:
ID category value
1 ID1 length 100
2 ID1 type L
3 ID1 color Blue
4 ID2 length 100
5 ID2 type M
6 ID2 color Blue
7 ID3 length 150
8 ID3 type M
9 ID3 color Blue
输出结果将如下所示:
ID.a ID.b matches
1 ID1 ID2 2
2 ID1 ID3 1
3 ID2 ID3 2
我使用tidyverse
将输入的数据框转换为tibble,如开始所示,然后在循环中使用match
。
# A tibble: 3 x 2
ID data
<chr> <list>
1 ID1 <tibble [1 x 3]>
2 ID2 <tibble [1 x 3]>
3 ID3 <tibble [1 x 3]>