【问题标题】:R: sorting indiviual letters from separate columns and merge them in one stringR:对不同列中的单个字母进行排序并将它们合并到一个字符串中
【发布时间】: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. 查看dplyrtidyr 包,例如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


【解决方案1】:

你可以试试:

df$col4<-apply(df[,1:3],1,function(x) paste(sort(x),collapse=""))
#  col1 col2 col3 val col4
#1    a    c    b   3  abc
#2    e    a    a   2  aae
#3    c    c    b   1  bcc
#4    c    a    b   6  abc

那你就用aggregate:

aggregate(val ~ col4,df,sum)
#  col4 val
#1  aae   2
#2  abc   9
#3  bcc   1

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2022-10-04
    • 2022-12-21
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多