Tôi gặp sự cố khi sử dụng data.table: Làm cách nào để chuyển đổi các lớp cột? Đây là một ví dụ đơn giản: Với data.frame, tôi không gặp sự cố khi chuyển đổi nó, với data.table, tôi chỉ không biết làm thế nào:
df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
#One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
#Another way
df[, "value"] <- as.numeric(df[, "value"])
library(data.table)
dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE)
#Error in rep("", ncol(xi)) : invalid 'times' argument
#Produces error, does data.table not have the option stringsAsFactors?
dt[, "ID", with=FALSE] <- as.character(dt[, "ID", with=FALSE])
#Produces error: Error in `[<-.data.table`(`*tmp*`, , "ID", with = FALSE, value = "c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)") :
#unused argument(s) (with = FALSE)
Tôi có bỏ lỡ điều gì đó rõ ràng ở đây không?
Cập nhật do bài đăng của Matthew: Tôi đã sử dụng phiên bản cũ hơn trước đây, nhưng ngay cả sau khi cập nhật lên 1.6.6 (phiên bản tôi sử dụng bây giờ) tôi vẫn gặp lỗi.
Cập nhật 2: Giả sử tôi muốn chuyển đổi mọi cột của lớp "nhân tố" thành cột "ký tự", nhưng không biết trước cột nào thuộc lớp nào. Với data.frame, tôi có thể làm như sau:
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
Tôi có thể làm điều gì đó tương tự với data.table không?
Cập nhật 3:
sessionInfo () R phiên bản 2.13.1 (2011-07-08) Nền tảng: x86_64-pc-mingw32 / x64 (64-bit)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.6
loaded via a namespace (and not attached):
[1] tools_2.13.1
#Produces error
. Vẫn +1. Tôi không gặp bất kỳ lỗi nào, bạn có phiên bản nào? Tuy nhiên, có một vấn đề trong lĩnh vực này, nó đã được nêu ra trước đó, FR # 1224 và FR # 1493 được ưu tiên giải quyết. Tuy nhiên, câu trả lời của Andrie là cách tốt nhất.
invalid times argument
lỗi đó ? Làm việc tốt cho tôi. bạn có những phiên bản nào?
data.table
các phương pháp khác nhau hơn là chodata.frame