【发布时间】:2013-04-11 01:29:26
【问题描述】:
我有兴趣指定缺失值的类型。我有不同类型的缺失数据,我正在尝试将这些值编码为 R 中的缺失值,但我正在寻找一种解决方案,我仍然可以区分它们。
假设我有一些看起来像这样的数据,
set.seed(667)
df <- data.frame(a = sample(c("Don't know/Not sure","Unknown","Refused","Blue", "Red", "Green"), 20, rep=TRUE), b = sample(c(1, 2, 3, 77, 88, 99), 10, rep=TRUE), f = round(rnorm(n=10, mean=.90, sd=.08), digits = 2), g = sample(c("C","M","Y","K"), 10, rep=TRUE) ); df
# a b f g
# 1 Unknown 2 0.78 M
# 2 Refused 2 0.87 M
# 3 Red 77 0.82 Y
# 4 Red 99 0.78 Y
# 5 Green 77 0.97 M
# 6 Green 3 0.99 K
# 7 Red 3 0.99 Y
# 8 Green 88 0.84 C
# 9 Unknown 99 1.08 M
# 10 Refused 99 0.81 C
# 11 Blue 2 0.78 M
# 12 Green 2 0.87 M
# 13 Blue 77 0.82 Y
# 14 Don't know/Not sure 99 0.78 Y
# 15 Unknown 77 0.97 M
# 16 Refused 3 0.99 K
# 17 Blue 3 0.99 Y
# 18 Green 88 0.84 C
# 19 Refused 99 1.08 M
# 20 Red 99 0.81 C
如果我现在制作两张表,我的缺失值("Don't know/Not sure","Unknown","Refused" 和 77, 88, 99)将作为常规数据包含在内,
table(df$a,df$g)
# C K M Y
# Blue 0 0 1 2
# Don't know/Not sure 0 0 0 1
# Green 2 1 2 0
# Red 1 0 0 3
# Refused 1 1 2 0
# Unknown 0 0 3 0
和
table(df$b,df$g)
# C K M Y
# 2 0 0 4 0
# 3 0 2 0 2
# 77 0 0 2 2
# 88 2 0 0 0
# 99 2 0 2 2
我现在将三个因子水平 "Don't know/Not sure","Unknown","Refused" 重新编码为 <NA>
is.na(df[,c("a")]) <- df[,c("a")]=="Don't know/Not sure"|df[,c("a")]=="Unknown"|df[,c("a")]=="Refused"
并删除空级别
df$a <- factor(df$a)
数值 77, 88, 和 99 也是如此
is.na(df) <- df=="77"|df=="88"|df=="99"
table(df$a, df$g, useNA = "always")
# C K M Y <NA>
# Blue 0 0 1 2 0
# Green 2 1 2 0 0
# Red 1 0 0 3 0
# <NA> 1 1 5 1 0
table(df$b,df$g, useNA = "always")
# C K M Y <NA>
# 2 0 0 4 0 0
# 3 0 2 0 2 0
# <NA> 4 0 4 4 0
现在缺少的类别被重新编码为NA,但它们都集中在一起。有没有办法将某些东西重新编码为丢失,但保留 original 值?我希望 R 将 "Don't know/Not sure","Unknown","Refused" 和 77, 88, 99 列为缺失,但我希望能够在变量中仍然拥有信息。
【问题讨论】:
-
向
df添加另一个名为isNA的列,如果缺少该值,该列将成立?或者isNA列可以直接容纳NA和0。这取决于您的其余代码。 -
这可以正常工作,但它更多的是一种解决方法,然后是一个可以无缝与我的其余代码一起工作的解决方案——正如您也指出的那样。你愿意用一个例子来证明它吗?
-
很难预测对其余代码的影响。也许您可以编写自己的
my.table使用my.is.na,它返回TRUE表示“不知道/不确定”、“未知”、“拒绝” -
您似乎向我们提供了汇总数据。您是否拥有比此格式更早的格式的数据?如果是这样,那只是一个因式分解的问题。
-
@BrandonBertelsen,谢谢你的问题(和你的回答)。我提供的虚拟数据与我的真实数据看起来非常接近。正如我在my comment to@Maxim.K 中提到的,我本来可以对变量
a更精确一些,但除此之外,我在问题中提供的数据与我的真实数据看起来非常接近。
标签: r base missing-data missing-features