在R中是否有方法将函数slice_max(dplyr)和fct_other(forcats)结合起来?
我试图结合来自dplyr的函数slice_max和来自forcats的函数fct_other来获得数据帧的前n个切片,基于一个数值变量,但我不想丢失非前n个因子。我希望这些其他因素被指定为“其他因素”,以便在我需要时进行总结或计算 例如,使用与此类似的数据帧:在R中是否有方法将函数slice_max(dplyr)和fct_other(forcats)结合起来?,r,dplyr,tidyverse,forcats,R,Dplyr,Tidyverse,Forcats,我试图结合来自dplyr的函数slice_max和来自forcats的函数fct_other来获得数据帧的前n个切片,基于一个数值变量,但我不想丢失非前n个因子。我希望这些其他因素被指定为“其他因素”,以便在我需要时进行总结或计算 例如,使用与此类似的数据帧: df <- data.frame(acron = c("AA", "BB", "CC", "DD", "EE", "FF&
df <- data.frame(acron = c("AA", "BB", "CC", "DD", "EE", "FF", "GG"), value = c(6, 4, 1, 10, 3, 1, 1))
获得下一个结果:
acron值DD 10
AA 6
BB 4 但我想指定删除“acron”的因子“Others”,类似于使用forcats函数fct_other获得的结果。我尝试过此代码,但它似乎不起作用:
df %>%
mutate(acron = fct_other(acron, keep = slice_max(value, n = 3), other_level = "Others"))
有没有建议买这样的东西
acron值DD 10
AA 6
BB 4
其他3
其他1
其他1
其他1 甚至像这样: acron值
DD 10
AA 6
BB 4
其他6
如果我们想使用带有
slice_max
的方法,它需要提取向量“acron”。使用pull
,可以将其提取出来
library(dplyr)
library(forcats)
df %>%
mutate(acron = fct_other(acron, keep = {.} %>%
slice_max(value, n = 3) %>%
pull(acron), other_level = "Others"))
# acron value
#1 AA 6
#2 BB 4
#3 Others 1
#4 DD 10
#5 Others 3
#6 Others 1
#7 Others 1
或者其他选项是
顺序
和标题
df%>%
变异(acron=fct_other(acron,keep=head)(acron[order(-value)],3),
其他_level=“其他”))%>%
排列(描述(值))
#acron值
#第10日第1日
#2 AA 6
#3 BB 4
#4其他3
#5其他1
#6其他1
#7其他1
或者先排列
,然后使用
df %>%
arrange(desc(value)) %>%
mutate(acron = fct_other(acron, keep = head(acron, 3), other_level = "Others"))
# acron value
#1 DD 10
#2 AA 6
#3 BB 4
#4 Others 3
#5 Others 1
#6 Others 1
#7 Others 1
要获得摘要输出,请按sum
df %>%
arrange(desc(value)) %>%
group_by(acron = fct_other(acron, keep = head(acron, 3),
other_level = "Others")) %>%
summarise(value = sum(value))
# A tibble: 4 x 2
# acron value
# <fct> <dbl>
#1 AA 6
#2 BB 4
#3 DD 10
#4 Others 6
df%>%
排列(描述(值))%>%
分组人(acron=fct)其他(acron,keep=head(acron,3),
其他_level=“其他”))%>%
总结(价值=总和(价值))
#一个tibble:4x2
#acron值
#
#1 AA 6
#2 BB 4
#第3 DD 10
#4其他6
如果我们想使用带有slice\u max
的方法,它需要提取向量“acron”。使用pull
,可以将其提取出来
library(dplyr)
library(forcats)
df %>%
mutate(acron = fct_other(acron, keep = {.} %>%
slice_max(value, n = 3) %>%
pull(acron), other_level = "Others"))
# acron value
#1 AA 6
#2 BB 4
#3 Others 1
#4 DD 10
#5 Others 3
#6 Others 1
#7 Others 1
或者其他选项是顺序
和标题
df%>%
变异(acron=fct_other(acron,keep=head)(acron[order(-value)],3),
其他_level=“其他”))%>%
排列(描述(值))
#acron值
#第10日第1日
#2 AA 6
#3 BB 4
#4其他3
#5其他1
#6其他1
#7其他1
或者先排列,然后使用
df %>%
arrange(desc(value)) %>%
mutate(acron = fct_other(acron, keep = head(acron, 3), other_level = "Others"))
# acron value
#1 DD 10
#2 AA 6
#3 BB 4
#4 Others 3
#5 Others 1
#6 Others 1
#7 Others 1
要获得摘要输出,请按sum
df %>%
arrange(desc(value)) %>%
group_by(acron = fct_other(acron, keep = head(acron, 3),
other_level = "Others")) %>%
summarise(value = sum(value))
# A tibble: 4 x 2
# acron value
# <fct> <dbl>
#1 AA 6
#2 BB 4
#3 DD 10
#4 Others 6
df%>%
排列(描述(值))%>%
分组人(acron=fct)其他(acron,keep=head(acron,3),
其他_level=“其他”))%>%
总结(价值=总和(价值))
#一个tibble:4x2
#acron值
#
#1 AA 6
#2 BB 4
#第3 DD 10
#4其他6
一个选项可以是使用fct\u lump\u n()
:
一个选项可以是使用fct\u lump\u n()
:
回答得好。我以前没有看到过fct\U肿块,所以只看了一眼。似乎fct_-lump
现在被认为是“历史”的,更具体的变体是首选。例如,fct\u lump\u min(acron,4,value)
@andrew\u reece我没有注意到它被更新了。谢谢你指出这一点,相应地修改了帖子:)@andrew_reece我使用的fct\u lump\u n()
没有min
参数,但你是对的,也可以使用fct\u lump\u min()
通过指定min
参数来解决这个问题:)@tmfmnk,谢谢。就这样。关键是使用“w”作为基于另一个数值变量的加权参数。@andrew_reece建议它也起作用,但对于fct_lump_min,您需要知道下面的数值,以便将其他因素声明为“其他”,在这种情况下为4。当然,它将来会派上用场的。回答得好。我以前没有看到过fct\U肿块,所以只看了一眼。似乎fct_-lump
现在被认为是“历史”的,更具体的变体是首选。例如,fct\u lump\u min(acron,4,value)
@andrew\u reece我没有注意到它被更新了。谢谢你指出这一点,相应地修改了帖子:)@andrew_reece我使用的fct\u lump\u n()
没有min
参数,但你是对的,也可以使用fct\u lump\u min()
通过指定min
参数来解决这个问题:)@tmfmnk,谢谢。就这样。关键是使用“w”作为基于另一个数值变量的加权参数。@andrew_reece建议它也起作用,但对于fct_lump_min,您需要知道下面的数值,以便将其他因素声明为“其他”,在这种情况下为4。当然,它将来会派上用场的。谢谢@akrun。您的建议是正确的,但使用建议的函数fct_lump_n,使用参数“w”作为权重,更简单谢谢@akrun。您的方法是正确的,但使用建议的函数fct_lump_n(使用参数“w”作为权重)更简单