【问题标题】:setting multiple columns NA's to value --R [duplicate]将多列NA设置为值--R [重复]
【发布时间】:2017-01-14 23:56:18
【问题描述】:

对 R 很陌生,我正在尝试子选择某些列以将它们的 NA 设置为 0。

目前为止:

col_names1 <- c('a','b','c')
col_names2 <- c('e','f','g')
col_names <- c(col_names1, col_names2)
data = fread('data.tsv', sep="\t", header= FALSE,na.strings="NA", 
         stringsAsFactors=TRUE,
         colClasses=my_col_Classes
        )  
setnames(data, col_names)
data[col_names2][is.na(data[col_names2])] <- 0

但我不断收到错误

`[.data.table`(`*tmp*`, column_names2) 中的错误:当 i 是 data.table(或字符向量)时,x 必须是键控(即已排序,并且,标记为已排序)所以data.table 知道要加入哪些列并利用 x 被排序。先调用setkey(x,...),见?setkey。

我相信这个错误是说我的订单有误,但我不知道该怎么做?

【问题讨论】:

  • 只是一个简短的说明,但fread 返回一个数据表。由于您是 R 新手,我可以想象您实际上想要一个数据框。如果是这样,在fread 中指定data.table = FALSE。另外,请记住,缺失值与 0 不同......根据您的操作,这可能会导致偏差。

标签: r null subquery data.table


【解决方案1】:

你可以用 data.table 分配:=

data <- data.table(a = c(2, NA, 3, 5), b = c(NA,2,3,4), c = c(2,5,NA, 6))
fix_columns <- c('a','b')    
fix_fun <- function(x) ifelse(is.na(x), 0 , x)

data[,(fix_columns):=lapply(.SD, fix_fun), .SDcols=fix_columns]

附:您无法从 data.table 中选择列,例如 data[col_names2]。如果您想通过字符向量选择它们,一种方法是:data[, col_names2, with = F]

【讨论】:

  • Avoid ifelse。请参阅上面 cmets 中链接的问题以获得更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 2013-12-03
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多