Ari*_*man 19 r survey missing-data stata data-structures
许多调查都有不同类型缺失的代码.例如,代码簿可能表明:
0-99数据
-1没问的问题
-5不知道
-7拒绝回应
-9模块没问
Stata有一个很好的设施来处理这些多种缺失,因为它允许你分配一个通用的.丢失数据,但也允许更具体的缺失类型(.a,.b,.c,...,.z).所有查看缺失的命令都会报告所有缺失条目的答案,但是您可以稍后对各种缺失进行排序.当您认为拒绝回应对归责策略的影响与未提出的问题不同时,这尤其有用.
我从未在R中遇到过这样的设施,但我真的很想拥有这种能力.有没有办法标记几种不同类型的NA?我可以想象创建更多的数据(包含缺失类型的长度为nrow(my.data.frame)的向量,或者哪些行具有哪种类型的缺失的更紧凑的索引),但这看起来非常笨拙.
Jor*_*eys 11
我知道你在寻找什么,而这在R中没有实现.我不知道实现的包,但是自己编写代码并不困难.
一种可行的方法是将数据框添加到包含代码的属性中.为了防止整个数据帧加倍并节省空间,我将在该数据帧中添加索引,而不是重建完整的数据帧.
例如:
NACode <- function(x,code){
Df <- sapply(x,function(i){
i[i %in% code] <- NA
i
})
id <- which(is.na(Df))
rowid <- id %% nrow(x)
colid <- id %/% nrow(x) + 1
NAdf <- data.frame(
id,rowid,colid,
value = as.matrix(x)[id]
)
Df <- as.data.frame(Df)
attr(Df,"NAcode") <- NAdf
Df
}
Run Code Online (Sandbox Code Playgroud)
这允许:
> Df <- data.frame(A = 1:10,B=c(1:5,-1,-2,-3,9,10) )
> code <- list("Missing"=-1,"Not Answered"=-2,"Don't know"=-3)
> DfwithNA <- NACode(Df,code)
> str(DfwithNA)
'data.frame': 10 obs. of 2 variables:
$ A: num 1 2 3 4 5 6 7 8 9 10
$ B: num 1 2 3 4 5 NA NA NA 9 10
- attr(*, "NAcode")='data.frame': 3 obs. of 4 variables:
..$ id : int 16 17 18
..$ rowid: int 6 7 8
..$ colid: num 2 2 2
..$ value: num -1 -2 -3
Run Code Online (Sandbox Code Playgroud)
也可以调整该函数以添加一个额外的属性,为您提供不同值的标签,另请参阅此问题.您可以通过以下方式进行回溯:
ChangeNAToCode <- function(x,code){
NAval <- attr(x,"NAcode")
for(i in which(NAval$value %in% code))
x[NAval$rowid[i],NAval$colid[i]] <- NAval$value[i]
x
}
> Dfback <- ChangeNAToCode(DfwithNA,c(-2,-3))
> str(Dfback)
'data.frame': 10 obs. of 2 variables:
$ A: num 1 2 3 4 5 6 7 8 9 10
$ B: num 1 2 3 4 5 NA -2 -3 9 10
- attr(*, "NAcode")='data.frame': 3 obs. of 4 variables:
..$ id : int 16 17 18
..$ rowid: int 6 7 8
..$ colid: num 2 2 2
..$ value: num -1 -2 -3
Run Code Online (Sandbox Code Playgroud)
如果需要,这允许仅更改所需的代码.该函数可以适用于在没有给出参数时返回所有代码.可以构造类似的函数来根据代码提取数据,我猜你可以自己解决这个问题.
但是在一行中:使用属性和索引可能是一种很好的方式.
最明显的方式似乎是使用两个向量:
NA.例如,c(2, 50, NA, NA)factor(c(1, 1, -1, -7))factor 1表示正确回答的问题.拥有这种结构可以为您提供创建灵活性,因为所有标准na.rm参数仍然适用于您的数据向量,但您可以使用更复杂的概念和因子向量.
更新@ gsk3中的以下问题
我应该声明我从未分析调查数据(尽管我已经分析了大型生物数据集).我上面的答案看起来很防守,但这不是我的意图.我认为你的问题很好,我对其他回答很感兴趣.