尽管已经研究了相关条目,但我无法解决问题。我有一个包含许多数据帧的列表,每个数据帧都有两列(变量)。我想重命名每个数据帧的第二列,分配它所属的数据帧的名称(不包括扩展名" .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 ...
答案 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的列表。