用NA替换列中的某些值

时间:2019-09-24 10:03:18

标签: r dplyr

我仍然是R编程领域的新手,目前正在努力解决以下问题:

df <- tibble(
  'VPN'= c(01, 02, 03, 04, 05),
  '11'= c(1.12, 4.12,4.64, 0.72, 3.5), 
  '11x'= c(4, 6, 3,1, NA), 
  '12'= c(3.15, 4.68, 7.92, 5.83, 2.25),
  '12x' = c(5, 7, 2, 2, 6), 
  '13' = c(2.26, 3.73, 4.54, 6.55, 1.72), 
  '13x' = c(8,3,2,5,9)
)

我想替换例如VPN 1的11 / 11x列中的值,VPN 5的13 / 13x列中的值(按NA)。

我想知道是否可以通过建立索引来实现这一目标?

我已经尝试过了。

df1 <- df[df$11] <- NA
df1 <- df(df$11x) <- NA 

..但是这仅返回一个向量,而不返回具有更改值的原始数据帧。

我很高兴获得帮助。 非常感谢 !

2 个答案:

答案 0 :(得分:3)

我们可以基于NA的值为不同的列分配VPN的值。在基数R中,

df[df$VPN == 1, c("11", "11x")] <- NA
df[df$VPN == 5, c("13", "13x")] <- NA

# A tibble: 5 x 7
#    VPN  `11` `11x`  `12` `12x`  `13` `13x`
#  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1     1 NA       NA  3.15     5  2.26     8
#2     2  4.12     6  4.68     7  3.73     3
#3     3  4.64     3  7.92     2  4.54     2
#4     4  0.72     1  5.83     2  6.55     5
#5     5  3.5     NA  2.25     6 NA       NA

dplyr中,我们可以使用mutate_at

library(dplyr)
df %>%
  mutate_at(vars(`11`, `11x`), ~replace(., VPN == 1, NA)) %>%
  mutate_at(vars(`13`, `13x`), ~replace(., VPN == 5, NA))

答案 1 :(得分:1)

您可以尝试:

df$`11`[df$VPN == 1] = NA
df$`11x`[df$VPN == 1] = NA
df$`13`[df$VPN == 5] = NA
df$`13x`[df$VPN == 5] = NA