Sta*_*cks 0 r missing-data plyr
我有一个相当大的数据框,其中有多个“-”代表丢失的数据。数据框由多个 Excel 文件组成,无法使用“na.strings =”或替代函数,因此我必须使用“-”表示导入它们。
如何用 NA / 缺失值替换数据框中的所有“-”?数据框由 200 列字符、因子和整数组成。
到目前为止,我已经尝试过:
sum(df %in c("-"))
returns: [1] 0
df[df=="-"] <-NA #does not do anything
library(plyr)
df <- revalue(df, c("-",NA))
returns: Error in revalue(tmp, c("-", NA)) :
x is not a factor or a character vector.
library(anchors)
df <- replace.value(df,colnames(df),"-",as.character(NA))
Error in charToDate(x) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
数据框由 200 列字符、因子和整数组成,所以我可以理解为什么最后两个不能正常工作。任何帮助,将不胜感激。
既然你已经使用tidyverse功能,您可以轻松地使用na_if从dplyr您的管道内。
例如,我有一个数据集,其中 999 用于填写非答案:
df <- tibble(
alpha = c("a", "b", "c", "d", "e"),
val1 = c(1, 999, 3, 8, 999),
val2 = c(2, 8, 999, 1, 2))
Run Code Online (Sandbox Code Playgroud)
如果我想改变val1999 是 NA,我可以这样做:
df %>%
mutate(val1 = na_if(val1, 999))
Run Code Online (Sandbox Code Playgroud)
在您的情况下,听起来您想跨多个变量替换一个值,因此使用mutate_atormutate_if会更合适:
df %>%
mutate_at(vars(val1, val2), na_if, 999)
Run Code Online (Sandbox Code Playgroud)
取代999所有实例均val1和val2与NA现在看起来是这样的:
# A tibble: 5 x 3
alpha val1 val2
<chr> <dbl> <dbl>
1 a 1. 2.
2 b NA 8.
3 c 3. NA
4 d 8. 1.
5 e NA 2.
Run Code Online (Sandbox Code Playgroud)
我相信最简单的解决方案是使用基本 R 函数is.na<-。它的目的正是解决这个问题。
首先,整理一些数据。然后将所需的值设置为NA。
set.seed(247) # make the results reproducible
df <- data.frame(X = 1:10, Y = sample(c("-", letters[1:2]), 10, TRUE))
is.na(df) <- df == "-"
df
# X Y
#1 1 a
#2 2 b
#3 3 b
#4 4 a
#5 5 <NA>
#6 6 b
#7 7 a
#8 8 <NA>
#9 9 b
#10 10 a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12235 次 |
| 最近记录: |