我正在尝试计算数据框中每列的平均值,并将平均值返回到数据框中具有相似名称的多个列中的每一行。我的想法是使用函数mutate(across(starts_with()))
来调用我想要操作的列,然后使用~summarize(mean())
来计算每列的平均值并改变每列的原始值。但是,我收到一条错误消息,提示summarize()
不能与Fruits - Apples
列中的我的数据类型一起使用。当我使用检查该列时str()
,它确认这些值属于字符类,因此我用转换了所有内容as.numeric()
。当我运行代码时,我仍然收到相同的错误。
# Sample Data
test<-structure(list(`Fruits - Apples` = c("1", "4"), `Fruits - Oranges` = c("2",
"6"), `Fruits - Bananas` = c("5", "3")), row.names = c(NA, -2L
), class = c("tbl_df", "tbl", "data.frame"))
> test
# A tibble: 2 × 3
`Fruits - Apples` `Fruits - Oranges` `Fruits - Bananas`
<chr> <chr> <chr>
1 1 2 5
2 4 6 3
# Attempted Code
nicetry<-test%>%
mutate(across(everything(), ~as.numeric(.x)))%>%
mutate(across(starts_with("Fruits -"), ~ summarize(mean = mean(.x, na.rm = T))))
# Error Code
Error in `mutate()`:
ℹ In argument: `across(starts_with("Fruits -"), ~summarize(mean = mean(.x, na.rm = T)))`.
Caused by error in `across()`:
! Can't compute column `Fruits - Apples`.
Caused by error in `UseMethod()`:
! no applicable method for 'summarise' applied to an object of class "c('double', 'numeric')"
Run `rlang::last_trace()` to see where the error occurred.
# Desired Output
`Fruits - Apples` `Fruits - Oranges` `Fruits - Bananas`
2.5 4 4
2.5 4 4
请勿
summarize
在里面使用mutate
。如果您想要与输入相同的行数,则使用
mutate
:如果您希望每组一行(由于您没有设置任何组,因此在本例中为 1 行),请使用
summarize
:还要注意,如果你正在应用一个没有额外参数的函数,像
as.numeric
上面那样,那么你不需要~foo(.x)
,你只需说foo
。