【问题标题】:Pasting (or merging) two elements of a column together将列的两个元素粘贴(或合并)在一起
【发布时间】:2012-01-17 18:16:26
【问题描述】:

我有两个临床程序计费信息来源,我已将它们加在一起(与rbind)。在每一行中都有一个 CPT 字段和一个 CPT.description 字段,提供简要说明。但是,描述与这两个来源略有不同。我希望能够将它们结合起来。这样,如果使用了不同的单词或缩写,那么我只需进行字符串搜索即可找到我要查找的内容。

因此,让我们对我能够生成的数据表进行简化表示。

cpt <- c(23456,23456,10000,44555,44555)
description <- c("tonsillectomy","tonsillectomy in >12 year old","brain transplant","castration","orchidectomy")
cpt.desc <- data.frame(cpt,description)

这就是我想要达到的目标。

cpt.wanted <- c(23456,10000,44555)
description.wanted <- c("tonsillectomy; tonsillectomy in >12 year old","brain transplant","castration; orchidectomy")
cpt.desc.wanted <- data.frame(cpt.wanted,description.wanted)

我尝试过使用 unstack 和 lapply(list,paste) 等函数,但这并不是粘贴每个列表的元素。我也尝试过重塑,但没有分类变量来区分第一版或第二版描述,甚至在某些情况下是第三版。真正烦人的部分是几个月或几年前我遇到了类似的问题,有人在 stackoverflow 或 r-help 上帮助了我,而我终其一生都找不到它。

所以根本问题是,假设我面前有一个电子表格。我需要对相邻列中具有相同 CPT 代码的两个甚至三个描述单元格进行垂直合并(粘贴)。

我应该使用哪些流行语来寻找解决此问题的方法。 非常感谢您的帮助。

【问题讨论】:

  • 如果您可以使用逗号而不是分号,您可以使用aggregate(description ~ cpt, cpt.desc, toString)。将aggregate 替换为您最喜欢的聚合工具,并将toString 替换为paste,如下面的答案所述。

标签: r stack paste reshape


【解决方案1】:
sapply( sapply(unique(cpt), function(x) grep(x, cpt) ),
                       # creates sets of index vectors as a list
        function(x) paste(description[x], collapse=";") )
       # ... and this pastes each set of selected items from "description" vector
[1] "tonsillectomy;tonsillectomy in >12 year old"
[2] "brain transplant"                           
[3] "castration;orchidectomy"     

【讨论】:

  • 我喜欢这个答案,因为它只使用基本函数。
【解决方案2】:

这是一种使用plyr的方法。

library("plyr")
cpt.desc.wanted <- ddply(cpt.desc, .(cpt), summarise, 
  description.wanted = paste(unique(description), collapse="; "))

给了

> cpt.desc.wanted
    cpt                           description.wanted
1 10000                             brain transplant
2 23456 tonsillectomy; tonsillectomy in >12 year old
3 44555                     castration; orchidectomy

【讨论】:

  • 我喜欢这个答案,因为它使用了一个我已经经常使用的包,并且只需一行易于理解的代码即可输出我想要的所有数据帧。
  • 我认为paste 函数的, collapse="; " 参数是可选的。为什么在上面的语法中它是必要的?继续尝试在没有它的情况下运行语法。它不会正常工作。此外,如果使用 data.table,cpt.desc &lt;- data.table(cpt,description) 必须这样做cpt.desc[,list(desciption.wanted=paste(description, collapse="; ")),by=cpt]
  • collapse 参数是可选的,您不必指定它即可使用paste() 函数。但是要做你想做的事,它是必需的。 paste() 做了两件事。给定(可能是多个)向量作为参数,它将它们逐个元素组合成单个字符向量(其中每个向量的贡献由sep 分隔)。如果未指定collapse,则返回此向量。如果指定了collapse,则粘贴在一起的向量的元素本身会连接起来,由collapse 分隔并返回单个字符串。
猜你喜欢
  • 2017-03-21
  • 2011-09-18
  • 1970-01-01
  • 2013-01-12
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多