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")])
我遇到以下问题:我从 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")])