将多列NA设置为值-R

时间:2016-09-07 10:28:01

标签: r null subquery data.table

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。

我相信这个错误是说我的订单错了,但我不确定我该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以使用data.table assign :=

来完成此操作
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]

P.S。你无法从像data[col_names2]这样的data.table中选择列。如果你想通过字符向量选择它们,一种方法是:data[, col_names2, with = F]