2016-09-07 68 views
0

很新的R,我想某些子選擇列以確定其NA的0設置多列NA的重視--R

到目前爲止我有:

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):當我是一個data.table(或字符向量)時,x必須被鍵入(即排序,並標記爲排序),所以data.table知道哪些列加入並利用o f x被排序。先撥打setkey(x,...),看到?setkey。

我相信這個錯誤是說我有錯誤的順序,但我不知道我是怎麼做的?

+1

只是一個簡短的提示,但'fread'返回一個數據表。既然你是R的新手,我可以想象你實際上想要一個數據框。如果是這樣,在'fread'內指定'data.table = FALSE'。另外,請記住,缺失的值與0不一樣...並且根據你在做什麼,這可能會導致偏見。 – Laterow

回答

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]

+0

[避免'ifelse'](http://stackoverflow.com/questions/16275149/does-ifelse-really-calculate-both-of-its-vectors-every-time-is-it-slow)。查看上面評論中鏈接的問題以獲得更好的方法。 – MichaelChirico