2015-10-07 60 views
1

我有数据帧的列表:更改类型帧

str(df.list) 

List of 34 
$ :'data.frame': 506 obs. of 7 variables: 
    ..$ Protocol : Factor w/ 5 levels "P1","P2","P3",..: 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ Time  : num [1:506] 0 2 3 0.5 6 1 24 24 24 24 ... 
    ..$ SampleID : Factor w/ 40 levels "P1T0","P1T0.5",..: 1 5 7 2 8 3 6 6 6 6 ... 
    ..$ VolunteerID: Factor w/ 15 levels "ID-02","ID-03",..: 10 10 10 10 10 10 10 11 13 14 ... 
    ..$ Assay  : Factor w/ 1 level "ALAT": 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ ResultAssay: int [1:506] 23 23 23 24 25 24 20 34 28 17 ... 
    ..$ Index  : Factor w/ 502 levels "P1T0.5VID-02",..: 8 31 37 2 43 19 25 26 28 29 ... 
$ :'data.frame': 505 obs. of 7 variables: 
    ..$ Protocol : Factor w/ 5 levels "P1","P2","P3",..: 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ Time  : num [1:505] 0 2 3 0.5 6 1 24 24 24 24 ... 
    ..$ SampleID : Factor w/ 40 levels "P1T0","P1T0.5",..: 1 5 7 2 8 3 6 6 6 6 ... 
    ..$ VolunteerID: Factor w/ 15 levels "ID-02","ID-03",..: 10 10 10 10 10 10 10 11 13 14 ... 
    ..$ Assay  : Factor w/ 1 level "ALB": 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ ResultAssay: int [1:505] 45 46 47 47 49 47 46 46 44 43 ... 
    ..$ Index  : Factor w/ 501 levels "P1T0.5VID-02",..: 8 31 37 2 43 19 25 26 28 29 .. 

该列表包含具有相等的变量名34个的数据帧。变量TimeResultAssay属于错误类型:我希望将Time作为因子,ResultAssay作为数字。

我想生成一个函数来与lapply一起使用来一次性将这个34数据框的列表的变量类型转换,但到目前为止我不成功。

我曾尝试在平行的事情:

ChangeType <- function(DF){ 

DF[,2] <- as.factor(DF[,2]) 
DF[, "ResultAssay"] <- as.numeric(DF[, c("ResultAssay")] 
} 

lapply(df.list, ChangeType) 
+1

您可能需要在'ChangeType' – akrun

+2

您也可以使用'transform'返回'DF' - 返回修改后的数据帧,有一个简单的衬垫:'lapply(df.list,变换, ResultAssay = as.numeric(ResultAssay),Time = as.factor(Time))' –

+1

@ColonelBe auvel我认为匿名函数是不需要的'lapply(df.list,transform,ResultAssay = as.numeric(ResultAssay),Time = as.factor(Time))' – akrun

回答

2

什么你已经尝试几乎是正确的,但你还需要返回新data.frame,也将其存储到你现有的变量,像这样:

ChangeType <- function(DF){ 

DF[,2] <- as.factor(DF[,2]) 
DF[, "ResultAssay"] <- as.numeric(DF[, c("ResultAssay")] 
DF #return the data.frame 
} 

# store the returned value to df.list, 
# thus updating your existing data.frame 
df.list <- lapply(df.list, ChangeType) 
+0

谢谢Jaap,这与@ColonelBeauvel建议的解决方案一样。 – Maddocent