如何处理R中的data.table列as.character?

时间:2016-05-17 13:46:32

标签: r data.table

我正在尝试使用data.table而不是data.frame(用于更快的代码)。尽管比较之间存在语法差异,但是当我需要提取特定字符列并将其用作字符向量时,我遇到了问题。我打电话的时候:

library(data.table)
DT <- fread("file.txt")
vect <- as.character(DT[, 1, with = FALSE])
class(vect)
###[1] "character"
head(vect)

它返回:

[1] "c(\"uc003hzj.4\", \"uc021ofx.1\", \"uc021olu.1\", \"uc021ome.1\", \"uc021oov.1\", \"uc021opl.1\", \"uc021osl.1\", \"uc021ovd.1\", \"uc021ovp.1\", \"uc021pdq.1\", \"uc021pdv.1\", \"uc021pdw.1\")

如何在输出中避免这些“\”的想法?

1 个答案:

答案 0 :(得分:2)

as.charactervector为主,而不是data.frame/data.table个对象,与OP预期的方式相同。因此,如果我们需要将第一列作为character类,使用.SD[[1L]]的子集并应用as.character

DT[, as.character(.SD[[1L]])]

如果有多列,我们可以使用.SDcols指定列索引并循环.SD以转换为character并将输出分配(:=)到特定的列。

DT[, (1:2) := lapply(.SD, as.character), .SDcols= 1:2]

数据

DT <- data.table(Col1 = 1:5, Col2= 6:10, Col3= LETTERS[1:5])