【问题标题】:Group by and row wise custom arrange in R在 R 中按分组和按行自定义排列
【发布时间】:2021-07-16 20:55:25
【问题描述】:

我有超过 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 中按pettreebirdflower 的顺序排列,然后在@ 中仅保留单个出现的值987654328@.

示例所需的数据框:

   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

如上所述,我找不到如何排列行。 如何做到这一点?

【问题讨论】:

  • 您想用什么替换 col1 值?使用 Null 还是 NA?

标签: r dataframe dplyr tidyverse


【解决方案1】:

我不确定这是否是摆脱这些价值观的好主意,因为会丢失信息。但这正在消除重复:

df %>% arrange(col1) %>%
  mutate_at(vars(col1), funs(replace(., duplicated(.), "")))

【讨论】:

  • 我知道这不是一个好主意。但我需要那个输出来发光。 ://
  • 好吧,那就可以理解了。我只是担心数据结构,但如果是这样的话,那就完全有道理了:)
  • 谢谢,伙计!你的回答奏效了。但是 akrun 已经发布了整个答案。因此选择他的答案。谢谢!
【解决方案2】:

base R中,我们可以用order在'col1'和factor转换'col2'和levels按自定义顺序指定,然后用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)] <- ""

-输出

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多