在 R 中使用管道创建新变量

Creating new variable using piping in R

我正在尝试在命令列表(管道)中创建一个新变量 confirmed_delta_perc,但我遇到了变量 active_delta 显示未找到的问题。我已确认它在数据框中但未被读取。它也不添加新变量。

COVID %>%
  select(county, confirmed, confirmed_delta) %>%
  mutate(confirmed_delta_perc = active_delta/active * 100) %>%
  filter(confirmed_delta_perc == 32)

错误:

Error in `mutate()`:
! Problem while computing `confirmed_delta_perc =
  active_delta/active`.
Caused by error:
! object 'active_delta' not found

这是要包含在管道中的完整说明列表: 使用管道,创建一个 link 选择县、确认和 confirmed_delta 变量的命令。使用 mutate() 函数创建一个名为 confirmed_delta_perc 的新变量。此列中的值应该是所有活动案例中活动增量案例的百分比。筛选出 confirmed_delta_perc 值为 32 的所有观察结果。打印出所有观察结果。

我尝试通过重命名数据框来修改 mutate(),以便它“重做”它并添加新变量,但它也不起作用。

没有任何实际等于 32 的观测值,但它仍然应该添加变量但不是。

有没有人有什么想法?

dput(head(COVID))

structure(list(county = c("Washington", "Fountain", "Jay", "Wabash", 
"Fayette", "Washington"), confirmed = c(620L, 737L, 930L, 1530L, 
1336L, 675L), confirmed_delta = c(18L, 12L, 11L, 49L, 19L, 29L
), deaths = c(5L, 8L, 14L, 25L, 33L, 6L), deaths_delta = c(0L, 
1L, 0L, 1L, 0L, 1L), recovered = c(0L, 0L, 0L, 0L, 0L, 0L), recovered_delta = c(0L, 
0L, 0L, 0L, 0L, 0L), active = c(615L, 729L, 918L, 1512L, 1305L, 
669L), active_delta = c(18L, 11L, 11L, 49L, 19L, 28L), active_delta_perc = c(0.0292682926829268, 
0.0150891632373114, 0.0119825708061002, 0.0324074074074074, 0.0145593869731801, 
0.0418535127055306)), row.names = c(NA, 6L), class = "data.frame")```

试试这个:

COVID <- COVID %>%
  mutate(confirmed_delta_perc = active_delta/active * 100) %>%
  filter( round(confirmed_delta_perc, 0) == 32)

按@JonSpring 在评论中建议的abs 函数过滤更好

对于大多数情况,其中任何部分都不可能正好 32%。例如,我们会将 90 个案例中的 29 个报告为“32%”,但实际上是 32.222222,并不严格等于 32。因此您需要指定 32 左右的范围算作匹配。在这里,我说任何一边 32 的 0.5 以内,从 31.5 到 32.5,都足够接近了。

COVID <- COVID %>%
  mutate(confirmed_delta_perc = active_delta/active * 100) %>%
  filter(abs(confirmed_delta_perc - 32) <= 0.5)