我仍然是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
..但是这仅返回一个向量,而不返回具有更改值的原始数据帧。
我很高兴获得帮助。 非常感谢 !
答案 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