使用对象名称重命名存储在列表中的数据框的变量

时间:2016-07-15 01:56:21

标签: r

尽管已经研究了相关条目,但我无法解决问题。我有一个包含许多数据帧的列表,每个数据帧都有两列(变量)。我想重命名每个数据帧的第二列,分配它所属的数据帧的名称(不包括扩展名" .csv")。具体来说,我需要用变量所在的对象名称替换变量的名称。

因此,例如,我有一个包含3个数据帧的列表

List of 3
 $ Conc.csv1: Classes 'data.table' and 'data.frame':    83 obs of 2 variables.
      .. $ Type: chr [1:83] "FAMILY" ...
      .. $ Process: int [1:83] 2304 ... NA NA

  $ Ambs.csv2: Classes 'data.table' and 'data.frame': 78 obs. of 2 variables:
  .. $ Type: chr [1:78] "CIVIL AND COMMERCIAL" ...
  .. $ Process: int [1:78] NA 2 ...

  $ Sec.csv3: Classes 'data.table' and 'data.frame': 117 obs. of 2 variables:
  .. $ Type: chr [1: 117] "Action"      
  .. $ Process: int [1: 117] NA NA 110 ...

我需要相同的列表,但重命名变量" Process"在每个数据框中都有数据框的名称

因此,输出应该如下:

List of 3
 $ Conc.csv1: Classes 'data.table' and 'data.frame':    83 obs of 2 variables.
  .. $ Type: chr [1:83] "FAMILY" ...
  .. $ Conc: int [1:83] 2304 ... NA NA

  $ Ambs.csv2: Classes 'data.table' and 'data.frame': 78 obs of 2 variables.
  .. $ Type: chr [1:78] "CIVIL AND COMMERCIAL" ...
  .. $ Ambs: int [1:78] NA 2 ...

  $ Sec.csv3: Classes 'data.table' and 'data.frame' 117 obs of 2 variables.
  .. $ Type: chr [1: 117] "Action"      
  .. $ Sec: int [1: 117] NA NA 110 ...

3 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,但我选择了旧的request.isRequestedSessionIdValid() 循环:

for

答案 1 :(得分:0)

> library("purrr")

> l <- list(Conc.csv1 = data.frame(Type = 1:5, Process = 1:5),
          Ambs.csv1 = data.frame(Type = 6:10, Process = 1:5),
          Sec.csv1 = data.frame(Type = 11:15, Process = 1:5))
> str(l)
List of 3
 $ Conc.csv1:'data.frame':  5 obs. of  2 variables:
  ..$ Type   : int [1:5] 1 2 3 4 5
  ..$ Process: int [1:5] 1 2 3 4 5
 $ Ambs.csv1:'data.frame':  5 obs. of  2 variables:
  ..$ Type   : int [1:5] 6 7 8 9 10
  ..$ Process: int [1:5] 1 2 3 4 5
 $ Sec.csv1 :'data.frame':  5 obs. of  2 variables:
  ..$ Type   : int [1:5] 11 12 13 14 15
  ..$ Process: int [1:5] 1 2 3 4 5

> l_names <- as.list(gsub( "\\.csv1$", "",names(l)))
> l_df <- map2(.x = l, .y = l_names, .f = ~ {colnames(.x)[2] <- .y; return(.x)})

> str(l_df)
List of 3
 $ Conc.csv1:'data.frame':  5 obs. of  2 variables:
  ..$ Type: int [1:5] 1 2 3 4 5
  ..$ Conc: int [1:5] 1 2 3 4 5
 $ Ambs.csv1:'data.frame':  5 obs. of  2 variables:
  ..$ Type: int [1:5] 6 7 8 9 10
  ..$ Ambs: int [1:5] 1 2 3 4 5
 $ Sec.csv1 :'data.frame':  5 obs. of  2 variables:
  ..$ Type: int [1:5] 11 12 13 14 15
  ..$ Sec : int [1:5] 1 2 3 4 5

答案 2 :(得分:0)

您还可以使用lapply,如下所示。假设您在其他示例中有一个名为l的列表:

newNames <- gsub("\\..*", "", names(l))
l <- lapply(seq_along(newNames),
            setNames(l[[i]], c(names(l[[i]])[1], newNames[i])))

这将返回一个重命名了data.frames的列表。