【问题标题】:R Combine Columns based on namesR根据名称组合列
【发布时间】:2017-08-28 19:32:24
【问题描述】:

我对 R 很陌生。

我有一个包含大约 300 列的原始数据集。列名类似于: “书封面图片”、“书封面标题”、“书封面作者”、“书封面”、“书名”、“作者”、“防尘套简介”、“防尘套作者”、“防尘套”摘要”、“书前摘要”、“书后评论”、“价格”

我想将本书封面上的所有文本连接到一个名为“Cover”的新列中。以后可以添加新列,我希望它可以自动化。我想出了如何让 grep 输出哪些列中包含“Cover”一词,但我不知道如何将它们连接在一起。

cdf<- names(rawdata) #column name data frame
cols<-grep("Cover",cdf) #returns column numbers that have the word Cover in them.
paste(rawdata[c(cols)],sep=" ") 

这里的很多主题都谈到了使用粘贴,但我似乎无法正确理解语法。这很可能是我的一些基本误解,但我感谢您提供的任何和所有帮助。

【问题讨论】:

  • 试试do.call(paste,rawdata[cols])
  • 好吧,在 nicola 的建议中使用 paste 而不是 paste0,因为您希望它们之间有一个空格
  • 效果很好,非常感谢!我会阅读 do.call 以便了解它是如何工作的。并感谢 Gregor 捕捉 paste0 与 paste!
  • 你快到了。 do.call 是在任意数量的参数上调用函数的便捷方式。

标签: r


【解决方案1】:

这是一个带有apply()的版本

rawdata = matrix(c(1:20), ncol=5)
colnames(rawdata) = c("Cover_a", "Cover_b", "c", "d", "ee")
rawdata[,2] = "some text"

cdf <- colnames(rawdata) #column name data frame
cols <- grep("Cover",cdf) #returns column numbers that have the word Cover in them.

apply(rawdata[,cols], 1, paste, collapse=" ")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2013-09-17
    • 2023-01-28
    • 2021-01-07
    相关资源
    最近更新 更多