gpt4 book ai didi

r - 相当于 tidyverse 中的一行应用()?

转载 作者:行者123 更新时间:2023-12-04 10:43:10 24 4
gpt4 key购买 nike

我想在 data.frame 中插入一个新列,当行中至少有一个缺失值时,该值为 TRUE,否则为 FALSE。

对于那个问题,apply是一个完美的用例:

编辑 - 添加示例

tab <- data.frame(a = 1:10, b = c(NA, letters[2:10]), c = c(LETTERS[1:9], NA))

tab$missing <- apply(tab, 1, function(x) any(is.na(x)))

但是,我加载了 strict包,并收到此错误: apply() coerces X to a matrix so is dangerous to use with data frames.Please use lapply() instead.
我知道我可以安全地忽略这个错误,但是,我想知道是否有一种方法可以使用 tidyverse 包之一对其进行编码, 以简单的方式 .我尝试使用 dplyr 失败:
tab %>% 
rowwise() %>%
mutate(missing = any(is.na(.), na.rm = TRUE))

最佳答案

如果你想避免强制转换为矩阵,你可以使用 purrr::pmap ,它并行迭代列表的元素并将它们传递给函数:

library(tidyverse)

tab <- data_frame(a = 1:10,
b = c(NA, letters[2:10]),
c = c(LETTERS[1:9], NA))

tab %>% mutate(missing = pmap_lgl(., ~any(is.na(c(...)))))
#> # A tibble: 10 x 4
#> a b c missing
#> <int> <chr> <chr> <lgl>
#> 1 1 <NA> A TRUE
#> 2 2 b B FALSE
#> 3 3 c C FALSE
#> 4 4 d D FALSE
#> 5 5 e E FALSE
#> 6 6 f F FALSE
#> 7 7 g G FALSE
#> 8 8 h H FALSE
#> 9 9 i I FALSE
#> 10 10 j <NA> TRUE

在函数中, c需要拉取所有传递给函数的参数 ...成一个向量,可以传递给 is.na并与 any 一起折叠. *_lgl后缀 pmap将结果简化为 bool 向量。

请注意,虽然这避免了强制转换为矩阵,但它不一定比这样做的方法更快,因为矩阵运算在 R 中进行了高度优化。 显式强制转换为矩阵可能更有意义,例如

tab %>% mutate(missing = rowSums(is.na(as.matrix(.))) > 0)

返回相同的内容。

关于r - 相当于 tidyverse 中的一行应用()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44952277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com