首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R按字母顺序重新排序列值

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

Stack Overflow用户
提问于 2020-04-07 18:02:49
回答 2查看 44关注 0票数 1

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

我想重新排序第二列"Car“字母,如下所示:

小汽车

奥迪/宝马/大众

奥迪/宝马

奥迪/宝马/大众

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

可以有0到15辆带有分隔符"/“的汽车

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

您是否知道更好、更智能的解决方案?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-07 18:06:47

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

代码语言:javascript
复制
df$Car <- sapply(strsplit(as.character(df$Car), "/"), function(x)
                  paste(sort(x), collapse = "/"))
票数 2
EN

Stack Overflow用户

发布于 2020-04-08 04:01:39

我们可以使用separate_rows拆分第二列,然后按'Name‘和’arrange‘拆分元素,并按'Name’对元素进行分组

代码语言:javascript
复制
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      

数据

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61077457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档