R 我想用列类的列表/向量重新分配128个列类?
基本上,我在其他帖子中找不到我需要的东西R 我想用列类的列表/向量重新分配128个列类?,r,class,data.table,R,Class,Data.table,基本上,我在其他帖子中找不到我需要的东西 我需要对读取的data.table中的数据进行重新排序(我无法给出col classes fread语句,因为我的列顺序不正确) 我需要将columns类更改为下面列出的内容 许多其他帖子似乎正在将一种类型的课程全部改为另一种类型的课程: 我相信我的问题是不同的,因为没有“将所有因素更改为字符”等。每一列都有一个特定的类,我必须提前更改 我将列名保存在一个名为selectColumns的向量中,并将其传递给fread selectColumns &l
selectColumns <- c(giantListofColumnsGoesHere)
DT <- fread("DT.csv", select=selectColumns, na.strings=NAsList)
setcolorder(DT, selectColumns)
colClasses <- list('character','character','character','factor','numeric','character','numeric','integer','integer','integer','integer','numeric','numeric','factor','factor','factor','logical','integer','numeric','factor','integer','integer','integer','factor','factor','factor','factor','factor','integer','integer','factor','integer','factor','factor','integer','factor','numeric','factor','numeric','character','factor','factor','factor','factor','factor','factor','factor','factor','factor','factor','integer','factor','numeric','factor','factor','character','factor','factor','factor','integer','numeric','integer','integer','integer','integer','integer','factor','character','factor','factor','factor','factor','integer','factor','factor','character','integer','integer','integer','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical','logical')
#Now the part I can't figure out, I've tried:
lapply(DT, class) <- colClasses
#OR
attr(DT, class) <- colClasses
#Obviously attr(DT, class) just gives "data.table" "data.frame"
selectColumns假设OP忘记在fread
中使用colClasses
,或者如果使用该选项有任何技术困难,并且想要更改数据的类。表
,则可以选择使用设置
for(j in seq_along(selectColumns)){
set(DT, i= NULL, j=selectColumns[j], value = get(colClasses[j])(DT[[selectColumns[j]]]))
}
str(DT)
#Classes ‘data.table’ and 'data.frame': 5 obs. of 6 variables:
#$ V1: num 1 2 3 4 5
#$ V2: chr "A" "B" "C" "D" ...
#$ V3: int 1 2 3 4 5
#$ V4: chr "F" "G" "H" "I" ...
#$ V5: chr "G" "H" "I" "J" ...
#$ V6: Factor w/ 5 levels "6","7","8","9",..: 1 2 3 4 5
请注意,“selectColumns”的初始类是
数据
DT假设OP忘记在fread
内部使用colClasses
,或者在使用该类时存在任何技术困难,并且想要更改数据的类。表
,使用设置
将是一个选项
for(j in seq_along(selectColumns)){
set(DT, i= NULL, j=selectColumns[j], value = get(colClasses[j])(DT[[selectColumns[j]]]))
}
str(DT)
#Classes ‘data.table’ and 'data.frame': 5 obs. of 6 variables:
#$ V1: num 1 2 3 4 5
#$ V2: chr "A" "B" "C" "D" ...
#$ V3: int 1 2 3 4 5
#$ V4: chr "F" "G" "H" "I" ...
#$ V5: chr "G" "H" "I" "J" ...
#$ V6: Factor w/ 5 levels "6","7","8","9",..: 1 2 3 4 5
请注意,“selectColumns”的初始类是
数据
DT您可能希望强调添加到colclass的前缀(OP没有),并更正分隔符(我认为您忘记了“as”后面的点)。关于因子的转换,可能也值得一提(因为您经常希望强制在数字或整数之前加字符)。非常感谢您的回复。明天我会在工作中尝试这个解决方案。关于如何更好地使用data.table和使用data.table操作数据,是否有一门课程或一本完整的书?将因子转换为逻辑因子怎么样?这样做有什么意义吗?或者用同样的方法有效地计算功?我的许多列(接近末尾)在我的数据中以“Y”或“N”的形式出现,它们是指示符,所以它们的真实值应该是TRUE或FALSE。@user6020651要将因子转换为逻辑,可以直接通过=
来完成。例如因子(c(“是”、“否”)==“是”#[1]真假
。关于data.table
courses,您可以查看Thks4allTheHelp@akrun Just FollowUp提供的课程,我尝试了以下方法:对于(顺序中的j(logicalColumns)){set(DT,i=NULL,j=logicalColumns[j],value=factor(DT[[logicalColumns[j]],c(“Y”,“N”),c(TRUE,FALSE))}将所有Y转换为TRUE,N转换为FALSE,但它们仍然是因子,所以我尝试将其切换到logical:for(j in seq_augh(logicalColumns)){set(DT,I=NULL,j=logicalColumns[j],value=get(logicalcollasses[j])(DT[[logicalColumns[j]]]),但它给出了一个类似于:无法为列'abs_DSC_IND'(type'factor')分配一个'logical'类型的值(不是字符、因子、整数或数字)首先:for(j在seq_中沿着(logicalColumns)){set(DT,i=NULL,j=logicalColumns[j],value=factor(DT[[logicalColumns[j]],c(“Y”,“N”),c(TRUE,FALSE))}
这是因子,尽管如此,我试图用它来改变:for(j在seq_中沿着(logicalColumns)){set(DT,i=NULL,j=logicalColumns[j],value=get(LogicalCollasses[j])(DT[[logicalColumns[j]]])}
您可能希望强调添加到ColClass的前缀(OP没有),并更正分隔符(我认为您忘记了“as”后面的点)。可能还值得注意因子的转换(因为您经常希望强制将字符置于数字或整数之前)。非常感谢您的回复。我明天将在工作中尝试此解决方案。是否有一门课程或一本全面的书,介绍如何更好地使用data.table并使用它处理数据?如何将因子转换为逻辑?这样做有何意义,或者因子是否也能以同样的方式有效工作?我的许多专栏文章(接近尾端)在我的数据中显示为“Y”或“N”,它们是指示符,所以真实值是TRUE或FALSE。@user6020651要将因子转换为逻辑值,可以通过==
直接完成。例如因子(c(“是”,“否”)==“是”[1]TRUE FALSE
。关于数据表
课程,您可以查看Thks4allTheHelp@akrun JustFollowUp提供的课程。我尝试了以下方法:for(j in seq_(logicalColumns){set(DT,i=NULL,j=logicalColumns[j],value=factor(DT[[logicalColumns[j]],c(“Y”,“N”),c(TRUE,FALSE))}这将所有的Y转换为TRUE,N转换为FALSE,但它们仍然是因子,所以我尝试将其转换为logical:for(j in seq_沿着(logicalColumns)){set(DT,I=NULL,j=logicalColumns[j],value=get(logicalcollasses[j])(DT[[logicalColumns[j]]),但它给出了如下错误:无法分配到列'abs_DSC__IND中(type'factor')“logical”类型的值(不是字符、因子、整数或数字)首先是:for(j in seq_沿着(logicalColumns)){set(DT,i=NULL,j=logicalColumns[j],value=factor(DT[[logicalColumns[j]],c(“Y”,“N”),c(TRUE,FALSE))
这是因子,尽管如此,我尝试使用此:for(j in seq_沿着(logicalColumns)){set(DT,i=NULL,j=logicalColumns[j],value=get(logicalColClasses[j])(DT[[logicalColumns[j]]))}
DT <- data.table(V1= 1:5, V2 = LETTERS[1:5], V3 = as.numeric(1:5),
V4 = LETTERS[6:10], V5 = LETTERS[7:11], V6 = 6:10)
colClasses <- paste0("as.",c("numeric", "integer", "factor"))
selectColumns <- c("V1", "V3", "V6")