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

作物

我的样本数据看起来像这样(实际数据要大得多)

library(tidyverse, warn.conflicts = F)
df <- tibble(chr_x = c(0,0,1,1,1,4,4,4,5,5,6,7),
             pos_x = c(1,2,3,4,5,6,7,8,9,0,1,2),
             chr_y = c(1,2,3,3,3,2,1,1,0,0,1,5),
             pos_some = c(1,2,3,4,5,6,7,8,9,0,1,2))

我需要将某些列中的某些值(chr开头替换为NA我这样做的方式

df %>% mutate_at(vars(starts_with("chr")), ~ na_if(., 0))
#> # A tibble: 12 x 4
#>    chr_x pos_x chr_y pos_some
#>    <dbl> <dbl> <dbl>    <dbl>
#>  1    NA     1     1        1
#>  2    NA     2     2        2
#>  3     1     3     3        3
#>  4     1     4     3        4
#>  5     1     5     3        5
#>  6     4     6     2        6
#>  7     4     7     1        7
#>  8     4     8     1        8
#>  9     5     9    NA        9
#> 10     5     0    NA        0
#> 11     6     1     1        1
#> 12     7     2     5        2

下一部分是我坚持的地方。现在,我需要将后续列NA中的值替换NA为以上列中的值我怎样才能做到这一点?产生的df应该看起来像这样

#> # A tibble: 12 x 4
#>    chr_x pos_x chr_y pos_some
#>    <dbl> <dbl> <dbl>    <dbl>
#>  1    NA     NA     1        1
#>  2    NA     NA     2        2
#>  3     1     3     3        3
#>  4     1     4     3        4
#>  5     1     5     3        5
#>  6     4     6     2        6
#>  7     4     7     1        7
#>  8     4     8     1        8
#>  9     5     9    NA        NA
#> 10     5     0    NA        NA
#> 11     6     1     1        1
#> 12     7     2     5        2

reprex包(v0.3.0)创建于2020-05-21

阿克伦

我们可以使用base R创建'chr'列('i1')的索引,对'chr'列进行子集化,将与0对应的值转换为NA('i2'),并更新'i1'以及下一个位置(' i2')乘以i2

i1 <- which(startsWith(names(df), 'chr'))
i2 <- NA^(df[i1] == 0)
df[i1] <- df[i1] * i2
df[i1 + 1] <- df[i1 + 1] * i2
df
# A tibble: 12 x 4
#   chr_x pos_x chr_y pos_some
#   <dbl> <dbl> <dbl>    <dbl>
# 1    NA    NA     1        1
# 2    NA    NA     2        2
# 3     1     3     3        3
# 4     1     4     3        4
# 5     1     5     3        5
# 6     4     6     2        6
# 7     4     7     1        7
# 8     4     8     1        8
# 9     5     9    NA       NA
#10     5     0    NA       NA
#11     6     1     1        1
#12     7     2     5        2

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据条件用另一列的值替换多列中的值

熊猫根据另一列中的值替换值

根据另一列替换列中的值

根据另一列中的值用预定值替换一列中的NA

根据条件将一列中的值替换为另一列中的值

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

根据前一列中的值创建新列

如何根据多列其他列中的值减去一列中的值?

根据Excel中多列中的值在一列中显示多个值

熊猫根据一列中的值条件一次覆盖多列中的值

如何根据另一列中的值进行条件替换列中的值?

根据另一列中的值替换列中的值

根据另一列中的值替换DataFrame列中的值

根据同一列中的其他值将列中的值替换为NaN

如何替换不在另一列值中的多列中的所有值

根据另一列的相应值替换一列中的空单元格?

根据条件匹配另一列的向量替换一列中的值

根据另一列的值替换一个列中的值

在 SSRS 报告中创建一列以根据前一列的条件对值求和

根据第一列的匹配值替换文件第二列中的值

根据一列中的值替换整个数据框中的空值

根据另一列中的值替换pandas df中的值

如何根据 Pandas 中另一列中的值替换 NAN 值

根据数据框中的前一列值对列值进行排名

根据另一列中的 nan 替换 pandas 列中的值

根据另一列中的条件替换列中的值

根据条件替换一列的值

根据另一列的值替换 Pandas 数据框中的特定值

如何根据一列中的值范围替换(编码)多个值?