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。
我相信这个错误是说我的订单错了,但我不确定我该怎么做?
答案 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]