2016-09-07 10 views
0

を評価するために複数の列を設定し、私は今のところ私が持っている彼らのNAのに0はNAのがRにかなり新しい、-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(または文字ベクトル)である場合には、xがキーする必要があります(つまり、ソート:私は `[.data.table`(` * TMP * `、column_names2)でエラー

エラーが得続けます、ソートされているとマークされているので)、data.tableはどのカラムに参加するのかを知り、 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] 

P.S.でそれを行うことができますdata[col_names2]のようにdata.tableから列を選択することはできません。文字ベクタでそれらを選択したい場合は、1つのアプローチがあります: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

関連する問題