我正在尝试使用Trim
包将DescTools
包中的dplyr
函数应用于R中的数据帧。
到目前为止,我的工作是:
x <- df %>%
group_by(Country) %>%
mutate_all(OfferPrice, Trim(trim = 0.1, na.rm = TRUE))
哪个返回以下错误:
Error in Trim(trim = 0.1, na.rm = TRUE) :
argument "x" is missing, with no default
我知道Trim()
的{{1}}部分内部的特性存在问题,但是我似乎无法在mutate
内部应用此功能。
该功能可修剪观测值的前10%和后10%,希望删除所有极值。
数据:
dplyr
答案 0 :(得分:1)
我认为您需要使用do
来执行此操作,因为Trim
的操作本质上是返回观察值的子集。试试:
x <- df %>%
group_by(Country) %>%
do(
Trim(.$OfferPrice, trim = 0.1, na.rm = TRUE)
)
然后可以在lapply
语句中使用map
或do
来Trim
的每一列数据,但是我不确定这是否是您真正想要的。尚不清楚,因为您尚未提供任何示例数据。尝试使用mutate_all
表示您希望分别Trim
的每一列数据,但这对我来说没有意义。
编辑,根据您的评论,您确实希望filter
医学列Trim
OfferPrice
的数据框,所以
x <- df %>%
group_by(Country) %>%
do(
.[attr(Trim(.$OfferPrice, trim = 0.1, na.rm = TRUE), "trim"), ]
)
有关详细信息,请参见Trim
的文档
调整后的值的索引将作为名为“ trim”的属性附加。
答案 1 :(得分:1)
假设您要为OfferPrice
排除的Trim(OfferPrice, ...)
的任何元素删除df
的整个行,获取结果的trim
属性Trim(...)
中的行,并使用slice
通过Country
删除那些行。
library(dplyr)
library(DescTools)
df %>%
group_by(Country) %>%
slice(-attr(Trim(OfferPrice, trim = 0.1, na.rm = TRUE), "trim")) %>%
ungroup
这也可以写成:
df %>%
group_by(Country) %>%
slice(OfferPrice %>%
Trim(trim = 0.1, na.rm = TRUE) %>%
attr("trim") %>%
`-`) %>%
ungroup