2017-08-28 120 views
1

我对R很新颖。R基于名称的组合列

我有一个包含大约300列的原始数据集。栏目名称类似于: “图书封面图片”,“图书封面图书标题”,“图书封面图书作者”,“图书封面图片”,“标题”,“作者”,“Dustjacket Blurb” ,“Dustjacket作者”,“Dustjacket摘要”,“书的正面总结”,“书评”,“价格”

我想将书的封面上的所有文本连接到一个新的列名为'封面'。新的列可以稍后添加,我希望它可以自动化。我想出了如何让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=" ") 

这里有很多关于使用粘贴的话题,但我似乎无法得到正确的语法。这很可能是我的一些基本误解,但我非常感谢您能给予的任何和所有帮助。

+2

尝试'do.call(糊,RAWDATA [COLS])'一个版本。 – nicola

+1

那么,在nicola的建议中使用'paste'而不是'paste0',因为你想要它们之间的空间 – Gregor

+0

这很好用,非常感谢!我会在do.call上阅读,以便我能理解这是如何工作的。并感谢Gregor抓住paste0 vs paste! –

回答

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=" ")