我有这样一个 Dataframe :
df <- tibble::tribble(
~COLOR, ~NUMBER, ~VALUE,
"BLACK", 1L, 100L,
"BLACK", 2L, 200L,
"BLUE", 1L, 100L,
"BLUE", 2L, 500L,
"BLUE", 3L, 600L,
"RED", 1L, 200L,
"RED", 2L, 300L)
我只想按NUMBER列的值降序排列COLOR列中标记为“BLUE”的行,而不修改其他行的位置或顺序,如下所示:
tibble::tribble(
~COLOR, ~NUMBER, ~VALUE,
"BLACK", 1L, 100L,
"BLACK", 2L, 200L,
"BLUE", 3L, 600L,
"BLUE", 2L, 500L,
"BLUE", 1L, 100L,
"RED", 1L, 200L,
"RED", 2L, 300L)
这似乎是一个简单的任务,我一直在尝试与不同的一些组合'安排()','跨越()',和'group_by',但我没有得到正确的代码。
我想代码可能是这样的:
df %>%
group_by(COLOR) %>%
arrange(.by_group = TRUE, if(condition == COLOR = "BLUE", true = desc(NUMBER)))
感谢你的帮助。谢谢。
3条答案
按热度按时间9rbhqvlz1#
如果列是数字,我们可以将"NUMBER"中的值修改为负数,其中
COLOR
是"BLUE",在arrange
中按降序排列如果列不是数值,则使用
group_by/group_modify
作为另一个选项bweufnob2#
在不修改其他行的位置的情况下,可以使用
base
样式的赋值。68bkxrlz3#
这里有一个解决方案: