首页 文章

将多列NA设置为值--R [重复]

提问于
浏览
0

这个问题在这里已有答案:

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必须被键入(即排序,并标记为已排序),因此数据 . table知道要加入哪些列并利用x进行排序 . 首先调用setkey(x,...),参见?setkey .

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

1 回答

  • 3

    你可以用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]

相关问题