【发布时间】:2016-04-20 11:29:53
【问题描述】:
我需要一个简单的 R 函数来按字母顺序对 col1:col3 中的字母按行排序,并将它们连接成一个字符串,ie "a" "c" "b" 和 "c" "a" "b" 将给出相同的字符串"abc",将存储在新列中。我的输入 data.frame 如下所示:
col1 col2 col3 val
a c b 3
e a a 2
c c b 1
c a b 6
...
结果:
col1 col2 col3 val col4
a c b 3 abc
e a a 2 aae
c c b 1 bcc
c a b 6 abc
...
之后,我需要总结产生相同字符串的行,以获得一个新的data.frame,如下所示:
col1 val
abc 9
aae 5
bbc 12
...
【问题讨论】:
-
1.使用类似
d$res <- apply(d,1,paste,collapse=''); 2. 查看dplyr和tidyr包,例如rstudio.com/wp-content/uploads/2015/02/… -
不要使用
apply边距为 1 来粘贴。这是非常低效的。你可以改用do.call(paste, c(sep = "", df[-4]))。尽管您仍然需要进行内部排序。 -
@DavidArenburg 我看到一次将
apply用于data.frame是合理的,因为需要进行排序。我同意这通常是低效的,但在这种情况下可能是有道理的(至少在有人给出更有效的方法之前)。 -
@nicola 如果您也执行排序,那么它可能是合理的。我主要不同意上面的评论。
-
@DavidArenburg 很多时候我认为 R 需要一个“字符排序”功能,但我认为它不存在。我想知道为什么(在 C 级别应该很容易实现)。
标签: r string sorting concatenation