Например, если у меня есть это:
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
r
dataframe
multiple-columns
r-faq
user2654764
источник
источник
paste()
? В приведенном выше примереx
столбец должен содержать данные как2-aa
, затем3-bb
и5-cc
.paste(df$n,df$s,sep="-")
s
имеет значение NA? (Я не хотел бы видеть ,3 NA
еслиdf$s[2]=NA
)Для вставки разделителя:
источник
A - B
вместоA-B
. Можно ли убрать это лишнее пространство?paste(df$n,df$s,sep="-")
sep
аргумента ...). Другой ответ, опубликованный почти за 4 года до вашего, однако, идеально отвечает на этот вопрос.Как уже упоминалось в комментариях Uwe и UseR, общим решением в
tidyverse
формате было бы использовать командуunite
:источник
x
представляющий имя нового столбца, содержащего комбинированные значения. Подумайте о dplyr'smutate
:df %>% dplyr::mutate(x = "your operations")
Некоторые примеры с НА и их удаление с помощью apply
источник
tidyr
пакет , чтобы воспроизвести ожидаемый ответ на первоначальный вопрос , это будет один вкладыш:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Однако я не вижу причин для этого, так какdf$x <- paste(df$n,df$s)
это намного проще.paste
илиtidyr::unite
.Использование
dplyr::mutate
:источник
dplyr::mutate()
. Извините, просто пытаюсь быть полезным - я больше не буду загрязнять сайт и воздержусь от будущих публикаций.Мы можем использовать paste0 :
Если вы не хотите, чтобы в объединенном поле вводились пробелы. Это более полезно, если вы планируете использовать комбинированное поле в качестве уникального идентификатора, представляющего комбинации двух полей.
источник
Вместо того
paste
(пробелы по умолчанию),paste0
(принудительное включение отсутствующихNA
как символа) илиunite
(ограничено 2 столбцами и 1 разделителем),Я бы предложил альтернативу столь же гибкую,
paste0
но более осторожнуюNA
:stringr::str_c
Создано 2020-04-10 с помощью пакета REPEX (v0.3.0)
дополнительное примечание из
str_c
документацииисточник
paste0(n,"-",s,".",b)
иstr_c(n,"-",s,".",b)
абсолютно одинаковы, оба используют разделитель по умолчанию, который является пустой строкой''
. Я также не знаю, почемуpaste
"аккуратно", вы имеете в виду, что не любите пробелы?paste0
иstr_c
не совсем то же самое. взгляните на эти ссылки: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
документация тоже могла бы быть более понятной!).Есть и другие отличные ответы, но в случае, если вы не знаете имена столбцов или количество столбцов, которые хотите объединить заранее, полезно следующее.
источник