2017-08-28 279 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=" ")