首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Group by和R中的逐行自定义排列

Group by和R中的逐行自定义排列
EN

Stack Overflow用户
提问于 2021-04-22 23:44:07
回答 2查看 71关注 0票数 3

我有一个包含超过10k+行的下表:

代码语言:javascript
运行
复制
set.seed(123)
df <- data.frame(col1 = c('A','A','A','A', 'B','B','B','B', 'C','C','C','C'),
                  col2 = c('flower','pet','bird','tree','flower','pet','bird','tree','flower','pet','bird','tree'),
                  col3 = sample(0:25, 12, replace = TRUE))

   col1   col2 col3
1     A flower   14
2     A    pet   18
3     A   bird   13
4     A   tree    2
5     B flower    9
6     B    pet   17
7     B   bird   21
8     B   tree   10
9     C flower    4
10    C    pet   19
11    C   bird   13
12    C   tree   21

我想通过按col1分组来排列每一行,然后从col2pettreebirdflower的顺序排列,然后在col1中只保留一次出现的值。

所需数据帧示例:

代码语言:javascript
运行
复制
   col1   col2 col3
1     A    pet   18
2         tree    2
3         bird   13
4       flower   14
5     B    pet   17
6         tree   10
7         bird   21
8       flower    9
9     C    pet   19
10        tree   21
11        bird   13
12      flower    4

我找不到如何像我上面提到的那样排列行。如何做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-23 00:26:04

base R中,我们可以在'col1‘上使用order,并使用自定义顺序中指定的levelsfactor转换为'col2’,然后使用duplicated将'col1‘中的重复元素替换为""

代码语言:javascript
运行
复制
df1 <-  df[order(df$col1, factor(df$col2, 
     levels = c('pet', 'tree', 'bird', 'flower'))),]
row.names(df1) <- NULL
df1$col1[duplicated(df1$col1)] <- ""

-output

代码语言:javascript
运行
复制
df1
#   col1   col2 col3
#1     A    pet   18
#2         tree    2
#3         bird   13
#4       flower   14
#5     B    pet   17
#6         tree   10
#7         bird   21
#8       flower    9
#9     C    pet   19
#10        tree   21
#11        bird   13
#12      flower    4
票数 2
EN

Stack Overflow用户

发布于 2021-04-22 23:55:18

我不确定这是不是一个摆脱价值观的好主意,因为信息的丢失。但这是在去掉重复项:

代码语言:javascript
运行
复制
df %>% arrange(col1) %>%
  mutate_at(vars(col1), funs(replace(., duplicated(.), "")))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67216572

复制
相关文章

相似问题

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