在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

这是管道中要包含的指令的完整列表:使用管道创建一个命令链接,用于选择county、confirmed和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")```

对于大多数情况,它们的任何部分都不可能恰好是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)

try this:

COVID <- COVID %>%
mutate(confirmed_delta_perc = active_delta/active * 100) %>%
filter( round(confirmed_delta_perc, 0) == 32)
@JonSpring在评论中建议使用abs函数进行过滤,尽管

最新更新