根据不同列中的值用NA替换多列中的值

汤姆

我有个小题...

# A tibble: 20 x 6
      id   X_1   Y_1 number   X_2   Y_2
   <int> <dbl> <dbl>  <dbl> <dbl> <dbl>
 1     1     1     3      1     1     3
 2     1     1     3      0     1     3
 3     2     2     4      1     2     4
 4     2     2     4      0     2     4
 5     3     1     3      1     1     3
 6     3     1     3      0     1     3

如果在number列中的值等于1,但仅在以“ _1”结尾的列中(因此X_1和Y_1),我想使所有值等于NA。

我也想在_2列中做相反的操作(即,数字等于零的行变为NA)。

它最终应该看起来像这样...

# A tibble: 20 x 6
      id   X_1   Y_1 number   X_2   Y_2
   <int> <dbl> <dbl>  <dbl> <dbl> <dbl>
 1     1    NA    NA      1     1     3
 2     1     1     3      0     1     3
 3     2    NA    NA      1     2     4
 4     2     2     4      0     2     4
 5     3    NA    NA      1     1     3
 6     3     1     3      0     1     3

我尝试了以下...

df %>% mutate_at(vars(contains("_1")), .funs = list(~if_else(number == 1, NA_real_, .)))

但这没有用。

我主要使用tidyverse,所以tidyverse解决方案将是更可取的。

多米尼克·迈耶(Dominik S. Meier)

在这里,一个实际评估变量number是0还是1的解决方案(以前的解决方案评估了以“ _1”或“ _2”结尾的变量是1还是0)。

library(dplyr)
df %>% 
  mutate(across((ends_with("_1")), ~ na_if(number, 1)),
        (across((ends_with("_2")), ~ na_if(number, 0))))

# A tibble: 6 x 6
     id   X_1   Y_1 number   X_2   Y_2
  <int> <int> <int>  <int> <int> <int>
1     1    NA    NA      1     1     1
2     1     0     0      0    NA    NA
3     2    NA    NA      1     1     1
4     2     0     0      0    NA    NA
5     3    NA    NA      1     1     1
6     3     0     0      0    NA    NA

编辑(保留原始值)

df %>% 
  mutate(across((ends_with("_1")), ~if_else(number == 1, NA_integer_, .))) %>% 
  mutate(across((ends_with("_2")), ~if_else(number == 0, NA_integer_, .)))

# A tibble: 6 x 6
     id   X_1   Y_1 number   X_2   Y_2
  <int> <int> <int>  <int> <int> <int>
1     1    NA    NA      1     1     3
2     1     1     3      0    NA    NA
3     2    NA    NA      1     2     4
4     2     2     4      0    NA    NA
5     3    NA    NA      1     1     3
6     3     1     3      0    NA    NA

数据

df <- tibble::tribble(
        ~id, ~X_1, ~Y_1, ~number, ~X_2, ~Y_2,
         1L,   1L,   3L,      1L,   1L,   3L,
         1L,   1L,   3L,      0L,   1L,   3L,
         2L,   2L,   4L,      1L,   2L,   4L,
         2L,   2L,   4L,      0L,   2L,   4L,
         3L,   1L,   3L,      1L,   1L,   3L,
         3L,   1L,   3L,      0L,   1L,   3L
        )

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据条件用熊猫替换多列中的值

来自分类Dev

dplyr的逐行+ replace_NAs:用其他列中的值替换多列中的NA

来自分类Dev

用多列中的特定值替换观察值

来自分类Dev

用R中相邻列中的值替换NA

来自分类Dev

用numpy替换数据框的多列中的值

来自分类Dev

根据前一列中的值替换多列中的值

来自分类Dev

根据列号替换列中的值

来自分类Dev

从不同的列开始替换数据框中的NA值

来自分类Dev

根据不同列中的值替换data.frame列中的值

来自分类Dev

根据另一列中的共识值替换一列中的NA值

来自分类Dev

用另一列中的值替换特定的NA

来自分类Dev

用R中另一列中的值替换特定列中的非NA值

来自分类Dev

熊猫根据值替换多列的值

来自分类Dev

根据条件替换列中的值

来自分类Dev

熊猫根据多列中的值映射

来自分类Dev

用多列中的列均值替换NA和NaN

来自分类Dev

根据PostgreSQL中的值计算不同的列

来自分类Dev

根据不同的条件更改列中的值

来自分类Dev

根据表中的不同值查询列

来自分类Dev

计算多列中的不同值

来自分类Dev

用Oracle替换列中的值

来自分类Dev

For循环根据R中的条件用NA替换值

来自分类Dev

根据条件用不同的替换字典替换pandas数据框列中的值

来自分类Dev

用其他列中的修改日期替换该列中的NA值

来自分类Dev

在R中,根据相邻列中字符的匹配项将值替换为NA

来自分类Dev

如果在R中满足条件,则用多列中的NA替换值

来自分类Dev

用另一列中的值替换属于一列的NA

来自分类Dev

r - 用基于唯一 ID 的同一列中的不同值替换 data.frame 列中的值

来自分类Dev

R根据列之间的匹配替换列中的值

Related 相关文章

热门标签

归档