是否有一种直接的方法可以在具有因子变量的整个数据帧中将NA更改为不同的值(例如“缺失”)?随后,有没有办法立即重新调整所有因素,将“缺失”作为第一级?
答案我看到我专注于改变特定向量,或改变非因子变量中的NA。但是我有数百个因子变量,因此对逐矢量方法进行硬编码是不可行的,在大型数据集中编写函数似乎效率不高。
如果某个功能是唯一的路线,那么任何人都知道大数据集的效率最高吗?或者可能有一种方法可以将我的数据加载到R中,在设置因子水平之前更改值?非常感谢。
答案 0 :(得分:0)
当你写出数据时,你可以这样做。在内部R中,您能否通过这样做更多地了解您要完成的任务?用其他东西替换NA
值意味着同样的事情通常不赞成。如果你想为NA
推算实际值,那将是一回事。也许你可以通过询问有关行为的问题来获得你正在寻找的行为,而不是转换NA
值来获得它。
至于在写出R时替换它们:write.table
和write.csv
参数为na
,默认设置为"NA"
。所以你要这样做:
write.table(my_data, file = "my_data.txt", na = "missing")
如果您正在阅读数据,可以通过指定NA
将其更改回na.strings = "missing"
,或者您可以将其保留原样,使其成为系数中的某个级别,但再一次,如果你这样做,你会错过让R将值视为实际缺失/未知。
答案 1 :(得分:0)
您可以尝试通过执行以下操作将NA转换为“缺失”。
your_data[is.na(your_data)] <- "missing"
答案 2 :(得分:0)
您可以通过创建以下功能来完成此操作:
levels()
relevel()
将第一级设置为'Missing'
将NAs更改为“Missing”
test_data <- data.frame(
column_1 = factor(c('A', 'B', 'A', NA)),
column_2 = factor(c('C', 'D', 'C', NA))
)
str(test_data)
'data.frame': 4 obs. of 2 variables:
$ column_1: Factor w/ 2 levels "A","B": 1 2 1 NA
$ column_2: Factor w/ 2 levels "C","D": 1 2 1 NA
missing_levels <- function(input_col){
levels(input_col) <- c(levels(input_col), 'Missing')
input_col <- relevel(input_col, ref = 'Missing')
input_col[is.na(input_col)] <- 'Missing'
return(input_col)
}
for(column in 1:NCOL(test_data)){
test_data[, column] <- missing_levels(test_data[, column])
}
str(test_data)
'data.frame': 4 obs. of 2 variables:
$ column_1: Factor w/ 3 levels "Missing","A",..: 2 3 2 1
$ column_2: Factor w/ 3 levels "Missing","C",..: 2 3 2 1