我的样本数据看起来像这样(实际数据要大得多)
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] 删除。
我来说两句