Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R按字母顺序重新排列列值_R - Fatal编程技术网

R按字母顺序重新排列列值

R按字母顺序重新排列列值,r,R,我在R中有这样一个数据帧: 我想对第二栏“汽车”重新排序如下: 汽车 奥迪/宝马/大众 奥迪/宝马 奥迪/宝马/大众 奥迪/宝马/保时捷/大众 可能有0到15辆车带有分隔符“/” 我的解决方案有点复杂。(使用此列构建新的数据框,将其拆分为多列,按字母顺序重新排列行,将它们粘贴在一起,插入原始数据框) 你知道更好更聪明的解决方案吗 非常感谢这基本上就是您所做的,但是没有创建新的数据帧和新列 df$Car <- sapply(strsplit(as.character(df$Car), "/

我在R中有这样一个数据帧:

我想对第二栏“汽车”重新排序如下:

汽车

奥迪/宝马/大众

奥迪/宝马

奥迪/宝马/大众

奥迪/宝马/保时捷/大众

可能有0到15辆车带有分隔符“/”

我的解决方案有点复杂。(使用此列构建新的数据框,将其拆分为多列,按字母顺序重新排列行,将它们粘贴在一起,插入原始数据框)

你知道更好更聪明的解决方案吗


非常感谢

这基本上就是您所做的,但是没有创建新的数据帧和新列

df$Car <- sapply(strsplit(as.character(df$Car), "/"), function(x)
                  paste(sort(x), collapse = "/"))

df$Car我们可以使用
分隔行
来拆分第二列,然后
按“名称”排列
,并按“名称”粘贴
按“名称”分组的元素

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      
库(dplyr)
图书馆(tidyr)
图书馆(stringr)
df1%>%
分隔行(车)%>%
安排(姓名、汽车)%>%
分组依据(名称,zipcode)%>%
总结(Car=str_c(Car,collapse=“/”))
#一个tibble:4x3
#分组:名称[4]
#名称zipcode汽车
#                    
#1法兰克3456奥迪/宝马/大众
#2礼来1333奥迪/宝马/保时捷/大众
#3玛丽1416奥迪/宝马
#4彼得1213奥迪/宝马/大众
数据
df1
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))