例えば私がこれを持っているならば:
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b)
n s b
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
それでは、2つの列nとsをxのような新しい列に結合して、次のようにします。
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
paste
を使用してください。
df$x <- paste(df$n,df$s)
df
# n s b x
# 1 2 aa TRUE 2 aa
# 2 3 bb FALSE 3 bb
# 3 5 cc TRUE 5 cc
セパレータを挿入する場合
df$x <- paste(df$n, "-", df$s)
NAを使ったいくつかの例とapplyを使ったそれらの削除
n = c(2, NA, NA)
s = c("aa", "bb", NA)
b = c(TRUE, FALSE, NA)
c = c(2, 3, 5)
d = c("aa", NA, "cc")
e = c(TRUE, NA, TRUE)
df = data.frame(n, s, b, c, d, e)
paste_noNA <- function(x,sep=", ") {
gsub(", " ,sep, toString(x[!is.na(x) & x!="" & x!="NA"] ) ) }
sep=" "
df$x <- apply( df[ , c(1:6) ] , 1 , paste_noNA , sep=sep)
df
UweとUseRによるコメントで既に述べたように、tidyverse
形式の一般的な解決策は、コマンドunite
を使用することです。
library(tidyverse)
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b) %>%
unite(x, c(n, s), sep = " ", remove = FALSE)
dplyr::mutate
を使う:
library(dplyr)
df <- mutate(df, x = paste(n, s))
df
> df
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
pasteを使うことができます。
df$combField <- paste0(df$x, df$y)
連結フィールドに埋め込みスペースを入れたくない場合。これは、結合フィールドを2つのフィールドの組み合わせを表す一意のIDとして使用することを計画している場合にさらに便利です。
の代わりに
paste
(整頓されていない)paste0
(デフォルトの区切り記号)またはunite
(2列1セパレータに制限)もっと柔軟な代替手段をお勧めします。stringr::str_c
library("tidyverse")
df %>% mutate(x=str_c(n,"-",s,".",b))
#> # A tibble: 3 x 4
#> n s b x
#> <dbl> <fct> <lgl> <chr>
#> 1 2 aa TRUE 2-aa.TRUE
#> 2 3 bb FALSE 3-bb.FALSE
#> 3 5 cc TRUE 5-cc.TRUE