在mutate_at()中使用case_when()用NA重新编码具有不同类型的所选列的行

杜诺瓦

给定数据:

df <- structure(list(cola = structure(c(5L, 9L, 6L, 2L, 7L, 10L, 3L, 
8L, 1L, 4L), .Label = c("a", "b", "d", "g", "q", "r", "t", "w", 
"x", "z"), class = "factor"), colb = c(156L, 8L, 6L, 100L, 49L, 
31L, 189L, 77L, 154L, 171L), colc = c(0.207140279468149, 0.51990159181878, 
0.402017514919862, 0.382948065642267, 0.488511856179684, 0.263168515404686, 
0.38591041485779, 0.774066215148196, 0.763264901703224, 0.474355421960354
), cold = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("a", 
"b"), class = "factor")), class = "data.frame", row.names = c(NA, 
-10L))

df
#    cola colb      colc cold
# 1     q  156 0.2071403    a
# 2     x    8 0.5199016    b
# 3     r    6 0.4020175    a
# 4     b  100 0.3829481    b
# 5     t   49 0.4885119    a
# 6     z   31 0.2631685    b
# 7     d  189 0.3859104    a
# 8     w   77 0.7740662    b
# 9     a  154 0.7632649    a
# 10    g  171 0.4743554    b

如果colc特定行中的值为>= 0.5,则我想用NA替换该行中所有其他单元格的内容,但cold该行的内容除外(我希望原样保留)。

我尝试了dplyr::mutate_at()base::ifelse(),它工作正常:

df %>% mutate_at(vars(-c(cold)), funs(ifelse(colc >= 0.5, NA, .)))

#    cola colb      colc cold
# 1     5  156 0.2071403    a
# 2    NA   NA        NA    b
# 3     6    6 0.4020175    a
# 4     2  100 0.3829481    b
# 5     7   49 0.4885119    a
# 6    10   31 0.2631685    b
# 7     3  189 0.3859104    a
# 8    NA   NA        NA    b
# 9    NA   NA        NA    a
# 10    4  171 0.4743554    b

但是我想用来做这件事dplyr::case_when(),因为我可能要满足多个替换条件(例如,用"foo"if替换colc < 0.5 & colc >= 0.3。但是case_when()看起来表现不佳

df %>% mutate_at(vars(-c(cold)), funs(case_when(colc >= 0.5 ~ NA, TRUE ~ .)))

错误:必须是逻辑向量,而不是因子对象

为什么会发生这种情况,我该怎么解决?我认为这是因为我正在尝试将具有不同数据类型的多个列转换为NA。我试图在网上寻找解决方案,但找不到。

编辑:具体来说,我想保留各个列的数据类型。

蔡卓妍
library(dplyr)

df %>%
  mutate_at(vars(-c(cold)), ~ case_when(colc >= 0.5 ~ `is.na<-`(., TRUE), TRUE ~ .))

#    cola colb      colc cold
# 1     q  156 0.2071403    a
# 2  <NA>   NA        NA    b
# 3     r    6 0.4020175    a
# 4     b  100 0.3829481    b
# 5     t   49 0.4885119    a
# 6     z   31 0.2631685    b
# 7     d  189 0.3859104    a
# 8  <NA>   NA        NA    b
# 9  <NA>   NA        NA    a
# 10    g  171 0.4743554    b

描述

当您使用case_when分配NA,你需要指定的类型NA,即NA_integer_NA_real_NA_complex_NA_character_但是,一次mutate_at转换多个列,并且这些列具有不同的类型,因此您不能在所有列上应用一个语句。理想情况下,可能会存在NA_guess识别类型的问题,但到目前为止我还没有发现。这种方法有点棘手。is.na()用来将输入向量转换为NA,而这些NA将与输入向量具有相同的类型。例如:

x <- 1:5
is.na(x) <- T ; x
# [1] NA NA NA NA NA
class(x)
# [1] "integer"

y <- letters[1:5]
is.na(y) <- T ; y
# [1] NA NA NA NA NA
class(y)
# [1] "character"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 mutate_at 重新编码多个列值并基于管道中的变异列创建一个新列

来自分类Dev

使用行中具有变量名的数据重新编码列

来自分类Dev

如何使用mutate_at和嵌套的ifelse语句自动重新编码许多变量?

来自分类Dev

无法使用ffmpeg重新编码具有不同比特率的音频流

来自分类Dev

在 R 中的 dplyr 中使用带有 mutate 和 case_when 的 shift:未按预期工作

来自分类Dev

如何在 dplyr mutate() 函数中使用 case_when ?

来自分类Dev

使用mutate_at和case_when将变量名称分配为值

来自分类Dev

使用 mutate 和 case_when 时从现有列插入值

来自分类Dev

使用mutate_at更改多种列类型

来自分类Dev

循环使用mutate和case_when

来自分类Dev

重新编码具有许多值(包括NA)的数字变量

来自分类Dev

查询具有不同类型数据的PostgreSQL JSONB列

来自分类Dev

用R中的NA重新编码变量

来自分类Dev

用dplyr或forcats重新编码NA因子

来自分类Dev

在Dplyr中使用case_when难以创建新列

来自分类Dev

dplyr:case_when / mutate / filter当多行具有共同值时

来自分类Dev

结合mutate(across)和case_when以根据条件用0填充多列

来自分类Dev

在R中使用mutate,case_when,any()和all()函数使用Group by

来自分类Dev

类型提示和具有不同类型的变量重新分配

来自分类Dev

熊猫将不同类型的多行转换为每一行具有多列的1行

来自分类Dev

具有不同类型的通用接口

来自分类Dev

具有不同类型对象的ArrayList

来自分类Dev

具有不同类型元素的数组

来自分类Dev

遍历具有不同类型的列表

来自分类Dev

具有不同类型节点的图

来自分类Dev

在 R 中使用可变数量的案例重新编码

来自分类Dev

C#-与在单个方法中使用类型检查相比,具有不同类型的重载方法是否具有更高的性能?

来自分类Dev

R dplyr与mutate()和case_when()有效地使用cross()

来自分类Dev

在具有不同数据类型的ORDER BY子句中使用CASE语句

Related 相关文章

  1. 1

    使用 mutate_at 重新编码多个列值并基于管道中的变异列创建一个新列

  2. 2

    使用行中具有变量名的数据重新编码列

  3. 3

    如何使用mutate_at和嵌套的ifelse语句自动重新编码许多变量?

  4. 4

    无法使用ffmpeg重新编码具有不同比特率的音频流

  5. 5

    在 R 中的 dplyr 中使用带有 mutate 和 case_when 的 shift:未按预期工作

  6. 6

    如何在 dplyr mutate() 函数中使用 case_when ?

  7. 7

    使用mutate_at和case_when将变量名称分配为值

  8. 8

    使用 mutate 和 case_when 时从现有列插入值

  9. 9

    使用mutate_at更改多种列类型

  10. 10

    循环使用mutate和case_when

  11. 11

    重新编码具有许多值(包括NA)的数字变量

  12. 12

    查询具有不同类型数据的PostgreSQL JSONB列

  13. 13

    用R中的NA重新编码变量

  14. 14

    用dplyr或forcats重新编码NA因子

  15. 15

    在Dplyr中使用case_when难以创建新列

  16. 16

    dplyr:case_when / mutate / filter当多行具有共同值时

  17. 17

    结合mutate(across)和case_when以根据条件用0填充多列

  18. 18

    在R中使用mutate,case_when,any()和all()函数使用Group by

  19. 19

    类型提示和具有不同类型的变量重新分配

  20. 20

    熊猫将不同类型的多行转换为每一行具有多列的1行

  21. 21

    具有不同类型的通用接口

  22. 22

    具有不同类型对象的ArrayList

  23. 23

    具有不同类型元素的数组

  24. 24

    遍历具有不同类型的列表

  25. 25

    具有不同类型节点的图

  26. 26

    在 R 中使用可变数量的案例重新编码

  27. 27

    C#-与在单个方法中使用类型检查相比,具有不同类型的重载方法是否具有更高的性能?

  28. 28

    R dplyr与mutate()和case_when()有效地使用cross()

  29. 29

    在具有不同数据类型的ORDER BY子句中使用CASE语句

热门标签

归档