我有一个包含超过10k+行的下表:
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分组来排列每一行,然后从col2按pet、tree、bird、flower的顺序排列,然后在col1中只保留一次出现的值。
所需数据帧示例:
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我找不到如何像我上面提到的那样排列行。如何做到这一点呢?
发布于 2021-04-23 00:26:04
在base R中,我们可以在'col1‘上使用order,并使用自定义顺序中指定的levels将factor转换为'col2’,然后使用duplicated将'col1‘中的重复元素替换为""
df1 <- df[order(df$col1, factor(df$col2,
levels = c('pet', 'tree', 'bird', 'flower'))),]
row.names(df1) <- NULL
df1$col1[duplicated(df1$col1)] <- ""-output
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发布于 2021-04-22 23:55:18
我不确定这是不是一个摆脱价值观的好主意,因为信息的丢失。但这是在去掉重复项:
df %>% arrange(col1) %>%
mutate_at(vars(col1), funs(replace(., duplicated(.), "")))https://stackoverflow.com/questions/67216572
复制相似问题