Ответ 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
Например, если у меня есть это:
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
Используйте 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 и 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)))))
}
Вы можете использовать
df$combField <- paste0(df$x,df$y)
Если вы не хотите, чтобы в конкатенированном поле вводилось свободное пространство. Это более полезно, если вы планируете использовать комбинированное поле как уникальный идентификатор, представляющий комбинации двух полей.
Вы также можете использовать 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