使用R

时间:2018-03-10 21:37:16

标签: r

是否有一种直接的方法可以在具有因子变量的整个数据帧中将NA更改为不同的值(例如“缺失”)?随后,有没有办法立即重新调整所有因素,将“缺失”作为第一级?

答案我看到我专注于改变特定向量,或改变非因子变量中的NA。但是我有数百个因子变量,因此对逐矢量方法进行硬编码是不可行的,在大型数据集中编写函数似乎效率不高。

如果某个功能是唯一的路线,那么任何人都知道大数据集的效率最高吗?或者可能有一种方法可以将我的数据加载到R中,在设置因子水平之前更改值?非常感谢。

3 个答案:

答案 0 :(得分:0)

当你写出数据时,你可以这样做。在内部R中,您能否通过这样做更多地了解您要完成的任务?用其他东西替换NA值意味着同样的事情通常不赞成。如果你想为NA推算实际值,那将是一回事。也许你可以通过询问有关行为的问题来获得你正在寻找的行为,而不是转换NA值来获得它。

至于在写出R时替换它们:write.tablewrite.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()
  • 添加“缺失”级别
  • 通过设置ref ='Missing'
  • ,使用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