[英]Concatenate row-wise across specific columns of dataframe
我有一個帶有列的數據框,當將這些列連接(按行)作為字符串時,我可以將數據框划分為所需的形式。
> str(data)
'data.frame': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
對於每一行,我想將 F、E、D 和 C 列中的數據連接成一個字符串(下划線字符作為分隔符)。 以下是我對此的不成功嘗試:
data$id <- sapply(as.data.frame(cbind(data$F,data$E,data$D,data$C)), paste, sep="_")
下面是不想要的結果:
> str(data)
'data.frame': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
$ id : chr [1:680420, 1:4] "9" "9" "37" "37" ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "V1" "V2" "V3" "V4"
任何幫助將不勝感激。
嘗試
data$id <- paste(data$F, data$E, data$D, data$C, sep="_")
反而。 矢量化代碼的美妙之處在於您不需要逐行循環或循環等效的 *apply 函數。
編輯更好的是
data <- within(data, id <- paste(F, E, D, C, sep=""))
使用unite
tidyr
的聯合:
require(tidyr)
data <- data %>% unite(id, F, E, D, C, sep = '_')
第一個參數是所需的名稱,接下來是sep
- 要連接的列。
stringr::str_c()
或paste()
都可以。
require(stringr)
data <- within(data, str_c(F,E,D,C, sep="_")
要不然
data <- within(data, paste(F,E,D,C, sep="_")
( stringr
在大型數據集上性能更好)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.