ฉันมีปัญหาในการใช้ data.table: ฉันจะแปลงคลาสคอลัมน์ได้อย่างไร นี่คือตัวอย่างง่ายๆ: ด้วย data.frame ฉันไม่มีปัญหาในการแปลงด้วย data.table ฉันไม่รู้วิธี:
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)
ฉันพลาดสิ่งที่ชัดเจนที่นี่หรือไม่?
อัปเดตเนื่องจากโพสต์ของ Matthew: ฉันเคยใช้เวอร์ชันเก่ากว่ามาก่อน แต่ถึงแม้จะอัปเดตเป็น 1.6.6 แล้ว (เวอร์ชันที่ฉันใช้ตอนนี้) ก็ยังได้รับข้อผิดพลาด
อัปเดต 2: สมมติว่าฉันต้องการแปลงทุกคอลัมน์ของคลาส "factor" เป็นคอลัมน์ "character" แต่ไม่รู้ล่วงหน้าว่าคอลัมน์ใดเป็นคลาสใด ด้วย data.frame ฉันสามารถทำสิ่งต่อไปนี้:
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
ฉันสามารถทำสิ่งที่คล้ายกันกับ data.table ได้หรือไม่
อัปเดต 3:
sessionInfo () R เวอร์ชัน 2.13.1 (2011-07-08) แพลตฟอร์ม: x86_64-pc-mingw32 / x64 (64 บิต)
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
โปรดวางข้อผิดพลาดที่เกิดขึ้นจริงมากกว่า +1 ต่อไป ฉันไม่ได้รับข้อผิดพลาดใด ๆ คุณมีเวอร์ชันใด มีปัญหาในพื้นที่นี้แม้ว่าจะมีการยกมาก่อนFR # 1224และFR # 1493มีความสำคัญสูงสำหรับที่อยู่ คำตอบของ Andrie เป็นวิธีที่ดีที่สุดแม้ว่า
invalid times argument
ข้อผิดพลาดนั้นหรือไม่? ทำงานได้ดีสำหรับฉัน คุณมีเวอร์ชันใด
data.table
วิธีการแตกต่างจากที่เป็นdata.frame