Подтвердить что ты не робот

Как объединить два или более столбца в dataframe в новый столбец с новым именем?

Например, если у меня есть это:

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

Затем как объединить два столбца 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
4b9b3361

Ответ 1

Используйте 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

Ответ 2

df$x <- paste(df$n,"-",df$s) для вставки разделителя.

Ответ 3

Некоторые примеры с NA и их удаление с использованием apply и lapply

n = c(2, NA, NA) 
s = c("aa", "bb", NA) 
b = c(TRUE, FALSE, NA) 
df = data.frame(n, s, b)

n = c(2, 3, 5) 
s = c("aa", NA, "cc") 
b = c(TRUE, NA, TRUE) 
df = data.frame(n, s, b)

sep=" "
df$x <- apply( df[ , c(1:3) ] , 1 , paste_noNA , collapse = sep, sep=sep)
df
#https://stackoverflow.com/questions/13673894/suppress-nas-in-paste
paste_noNA <- function(...,sep) {
  L <- list(...)
  L <- lapply(L,function(x) {x[is.na(x) | x=="NA"] <- ""; x})
  gsub(paste0("(^",sep,"|",sep,"$)"),"",
       gsub(paste0(sep,sep),sep,
            do.call(paste,c(L,list(sep=sep)))))
}

Ответ 4

Вы можете использовать df$combField <- paste0(df$x,df$y)

Если вы не хотите, чтобы в конкатенированном поле вводилось свободное пространство. Это более полезно, если вы планируете использовать комбинированное поле как уникальный идентификатор, представляющий комбинации двух полей.

Ответ 5

Вы также можете использовать cbind.

cbind(df,n,s)
  n  s     b n  s
1 2 aa  TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc  TRUE 5 cc