【发布时间】:2018-06-13 15:52:36
【问题描述】:
我有一个dataframe,其中包含混合数据,从具有数值的变量(或列)到具有因子的变量(或列)。
我想在 R 中使用以下代码将所有负值替换为 NA,如果该变量的 99% 以上的观察结果为 NA,则随后删除整个变量。
第一部分应该确保遇到字符串时没有问题。 是否可以简单地开始:
mydata$v1[mydata$v1<0] <- NA
但不是特定于v1 并且仅当观察不是字符串时?
跟进: 这就是我对@stas g 提供的解释的了解。然而,似乎没有从 df 中删除任何变量。
#mixed data
df <- data.frame(WVS_Longitudinal_1981_2014_R_v2015_04_18)
dat <- df[,sapply(df, function(x) {class(x)== "numeric" | class(x) ==
"integer"})]
foo <- function(dat, p){
ind <- colSums(is.na(dat))/nrow(dat)
dat[dat < 0] <- NA
dat[, ind < p]
}
#process numeric part of the data separately
ii <- sapply(df, class) == "numeric" | sapply(df, class) == "integer"
dat.num <- foo(as.matrix(df[, ii]), 0.99)
#then stick the two parts back together again
WVS <- data.frame(df[, !ii], dat.num)
【问题讨论】:
-
你需要提供一个最小可重现的例子
标签: r replace stata missing-data