更改多个数据框中的变量类型

时间:2015-10-07 10:51:15

标签: r dataframe

我有一个数据框列表:

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 个答案:

答案 0 :(得分: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)