我在一个由因子组成的数据框中有两个向量(每个向量中有约 10000 个唯一因子)。
这是我的数据的简化示例:
tg<-data.frame(A=sample(letters[1:5],30,replace=TRUE),
B=sample(letters[1:5],30,replace=TRUE))
A B
1 b b
2 a b
3 e e
4 c b
5 e e
6 a b
7 d a
8 d a
9 d b
10 a e
11 a e
. . .
我想组合(按行)两列中的元素并创建一个新的 ID。
一种方法是将两列简单地粘贴在一起:
paste0(tg$A,tg$B)
[1] "bb" "ab" "ee" "cb" "ee" "ab" "da" "da" "db" "ae"
"ae" "bc" "ae" "bb" "ec" "ba" "dd" "de" "cd" "eb" "cd"
"db" "dc" "ab" "ae" "cc" "dc" "ce" "eb" "ea"
But我想创建将“ab”和“ba”视为相同的新ID,我该怎么做?
编辑:对于令人困惑的标题感到抱歉,我找不到任何更好的方法来解释该问题(因此无法找到任何解决方案 - 如果这里已经有一个解决方案)。
对您的 ID 中的字母进行排序将解决该问题(如下这个问题 https://stackoverflow.com/questions/5904797/how-to-sort-letters-in-a-string-in-r):
strSort <- function(x)
sapply(lapply(strsplit(x, NULL), sort), paste, collapse="")
unique(sapply(new_ids, strSort))
[1] "be" "bd" "bc" "ae" "aa" "ab" "ad" "cd" "ac" "dd" "ee" "ce" "cc" "de"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)