【发布时间】:2021-06-04 14:22:04
【问题描述】:
这里是自学编码,没有 cs 背景。似乎我一直遇到这样的问题,我不了解我使用的 tidy verse 函数在幕后发生了什么。我需要有人解释为什么这不能以我能理解的方式工作。
我正在尝试运行此代码:
df2.p<- df2 %>% mutate(across(4:9,~./weight))
我将这段代码理解为“将 df2 的 4:9 列除以 df2 中名为 weight 的列”
我收到此错误:
错误:
mutate()输入..1有问题。 x 输入..1无法回收到大小 52。 ℹ 输入..1是(function (.cols = everything(), .fns = NULL, ..., .names = NULL) ...。 ℹ 输入..1的大小必须是 52 或 1,而不是 42021。
我查看了 df2 的大小。不知道发生了什么。
类(df2)“tbl_df”“tbl”“data.frame” 暗淡(df2)是 52 x 10
创建 df2 的代码是:
df2<- df1.w %>%
group_by(state) %>%
summarise(weight.s= sum(weight, na.rm= TRUE),
native.s= sum(Native, na.rm= TRUE),
asian.s= sum(Asian, na.rm= TRUE),
black.s= sum(Black, na.rm= TRUE),
pacisland.s= sum(`Pacific Islander`, na.rm= TRUE),
middle.s= sum(`Middle Eastern`, na.rm= TRUE),
white.s= sum(White, na.rm= TRUE),
raceo.s= sum(`Race Other`, na.rm= TRUE),
na.rm= TRUE
)
我从具有 42021 行的 df1.w 创建了 df2。我按州对这些行进行分组以达到 52 行。似乎 mutate() 正在取消组合 df2 并以某种方式将其视为 df1.w 。我如何让它发挥作用?
【问题讨论】:
-
你能不能显示
packageVersion('dplyr')可以试试df2 %>% ungroup %>% mutate(across(4:9,~./weight))或在summarise中指定.groups = 'drop' -
packageVersion('dplyr') [1] '1.0.4'
-
我也使用
1.0.4,它可以很好地处理这些数据mtcars %>% group_by(am) %>% summarise(across(everything(), sum)) %>% mutate(across(4:7, ~ ./carb)) -
不肯定我正在正确使用 .groups= 'drop' 我只是将它添加到我的 df2 代码的末尾吗? ``` white.s= sum(White, na.rm= TRUE), raceo.s= sum(
Race Other, na.rm= TRUE), na.rm= TRUE, .groups = 'drop') `` ` 这导致了同样的错误。 -
我会尝试使用 mtcars 进行复制,看看能否让它工作