R изменить порядок столбцов в алфавитном порядке - PullRequest
1 голос
/ 07 апреля 2020

У меня есть такой фрейм данных в R:

enter image description here

, и я хочу изменить порядок второго столбца "Car" alphbethi c следующим образом :

Автомобиль

Audi / BMW / VW

Audi / BMW

Audi / BMW / VW

Audi / BMW / Porsche / VW

может быть от 0 до 15 автомобилей с разделителем "/"

Мое решение немного сложнее. (создайте новый DataFrame с этим столбцом, разбейте их на несколько столбцов, измените порядок строк в алфавитном порядке c, вставьте их вместе, вставьте в исходный кадр данных)

знаете ли вы лучшее и более умное решение?

спасибо большое

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Это в основном то, что вы сделали, но без создания нового фрейма данных и новых столбцов.

df$Car <- sapply(strsplit(as.character(df$Car), "/"), function(x)
                  paste(sort(x), collapse = "/"))
0 голосов
/ 07 апреля 2020

Мы можем использовать separate_rows для разделения второго столбца, затем arrange по «Имени» и «Автомобиль» и paste элементов, сгруппированных по «Имени»

library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
  separate_rows(Car) %>%
  arrange(Name, Car) %>%
  group_by(Name, zipcode) %>%
  summarise(Car = str_c(Car, collapse="/"))
# A tibble: 4 x 3
# Groups:   Name [4]
#  Name  zipcode Car                
#  <chr>   <dbl> <chr>              
#1 Frank    3456 Audi/BMW/VW        
#2 Lilly    1333 Audi/BMW/Porsche/VW
#3 Marie    1416 Audi/BMW           
#4 Peter    1213 Audi/BMW/VW      

данных

df1 <- structure(list(Name = c("Peter", "Marie", "Frank", "Lilly"), 
    Car = c("BMW/VW/Audi", "Audi/BMW", "VW/BMW/Audi", "Audi/BMW/VW/Porsche"
    ), zipcode = c(1213, 1416, 3456, 1333)),
  class = "data.frame", row.names = c(NA, 
-4L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...