簡體   English   中英

跨 dataframe 的特定列逐行連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM