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

Dplyr мутировать в R - добавить столбец как concat столбцов

У меня проблема с использованием функции mutate{dplyr} с целью добавления нового столбца в кадр данных. Я хочу, чтобы новый столбец имел тип символа и состоял из "concat" отсортированных слов из других столбцов (которые также имеют тип символа). Например, для следующего фрейма данных:

> library(datasets)
> states.df <- data.frame(name = as.character(state.name),
+                         region = as.character(state.region),
+                         division = as.character(state.division))
> 
> head(states.df, 3)
     name region           division
1 Alabama  South East South Central
2  Alaska   West            Pacific
3 Arizona   West           Mountain 

Я хотел бы получить новый столбец со следующим первым элементом:

"Alamaba_East South Central_South" 

Я пробовал это:

mutate(states.df,
   concated_column = paste0(sort(name, region, division), collapse="_"))

Но я получил сообщение об ошибке:

Error in sort(1:50, c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L,  : 
  'decreasing' must be a length-1 logical vector.
Did you intend to set 'partial'?

Спасибо за любую помощь заранее!

4b9b3361

Ответ 1

Вам нужно использовать sep = not collapse = и зачем использовать sort?. И я использовал paste, а не paste0.

library(dplyr)
states.df <- data.frame(name = as.character(state.name),
                        region = as.character(state.region), 
                        division = as.character(state.division))
res = mutate(states.df,
   concated_column = paste(name, region, division, sep = '_'))

Что касается сортировки, вы не используете sort правильно. Возможно, вы хотите:

as.data.frame(lapply(states.df, sort))

Сортирует каждый столбец и создает новый data.frame с этими столбцами.

Ответ 2

Добавляя к Павлу ответ. Если вы хотите отсортировать строки, вы можете попробовать order. Вот пример:

res1 <- mutate(states.df,
          concated_column = apply(states.df[order(name, region, division), ], 1, 
                                  function(x) paste0(x, collapse = "_")))

Здесь порядок сортирует состояния data.frame states.df по имени, а затем разбивает связь по области и делению