Dataframe 按列表子集化,不识别 "NA" 值

Dataframe subsetting by list, not recognising "NA" values

我遇到以下问题:我从 csv 导入数据。导入的 csv 看起来像这样

df <- data.frame(x=c(1,2,3,4,5), y=c("K","M",NA,NA,"K"))

其中 K 表示 1 000,M 表示 1 000 000。我想用 dplyr 创建一个新列,以便我使用一个列表来对 K 和 M 进行子集化,然后乘以 x 列中的值

sul <- c("K"=1000, "M"=1000000, "NA"=1)

所以使用 dplyr:

df %>% mutate(result=x * sul[y])

我的问题是,从 csv 导入数据的结果在 sul[y] 中未被识别,我得到 NA 或 NULL。你知道如何优雅地解决这个问题吗?那么有没有更好的办法运行:

df$y[is.na(df&y)]<-1

非常感谢!

p.s。选择列表子集而不是 for 循环来提高处理数据的速度。

最好把NA换成'Other'再做

 sul <- c(K=1000, M=1000000, Other=1)
 df %>%
    mutate(y1 = replace(as.character(y), is.na(y), "Other"),
           result = x*sul[y1]) %>%
    select(-y1)
#  x    y  result
#1 1    K    1000
#2 2    M 2000000
#3 3 <NA>       3
#4 4 <NA>       4
#5 5    K    5000

sul中的'NA'是字符串,不是真正的NA。因此,如果我们使用 OP 的 post 中的 'sul',replace 'y' 中的 'NA' 到 "NA"

df %>%
      mutate(result = x*sul[replace(as.character(y), is.na(y), "NA")])