cbind 列表中的特定列(没有 dplyr 包)

cbind specific columns in list (without dplyr package)

我有一个包含大约 50 个(槽)的列表 - 数据帧。此列表 (dataframe) 的每个 element 都有 10 列,其中 3 列对应于“年”、“月”和“日” .我如何将这三列合并为一列(通过创建新列),在此列表的每个数据框中,并将它们同时转换为 as.Date 格式 不使用 dplyr 包 .

我正在发送一个可重现的例子:

city_A <- data.frame(year = c(1995,1996,1997),month = c(5,6,9),day = c(1,5,8),ozone = c(0.5,0.9,0.12))
city_D <- data.frame(year = c(1982,1959,1909),month = c(3,10,12),day = c(21,24,30),ozone = c(1.5,2.9,3.14))

town_list <- list(city_A,city_D)

预期的结果是这样的:

[[1]]
  date              year   month day  ozone
1 1995-05-01        1995     5     1    0.5
2 1996-06-05        1996     6     5    0.9
3 1997-09-08        1997     9     8    0.12

[[2]]
  date              year   month day  ozone
1 1982-03-21        1982     3    21    1.5
2 1959-10-24        1959    10    24    2.9
3 1909-12-30        1909    12    30    3.14

使用do.call(rbind, x)

city_A <- data.frame(year = c(1995,1996,1997),month = c(5,6,9),day = c(1,5,8),ozone = c(0.5,0.9,0.12))
city_D <- data.frame(year = c(1982,1959,1909),month = c(3,10,12),day = c(21,24,30),ozone = c(1.5,2.9,3.14))

town_list <- list(city_A,city_D)

do.call(rbind, town_list)
#>   year month day ozone
#> 1 1995     5   1  0.50
#> 2 1996     6   5  0.90
#> 3 1997     9   8  0.12
#> 4 1982     3  21  1.50
#> 5 1959    10  24  2.90
#> 6 1909    12  30  3.14

reprex package (v2.0.1)

于 2022-02-03 创建

我们可以使用ISOdatetransform来创建Dateclass

lapply(town_list, transform, date = as.Date(ISOdate(year, month, day)))

如果它需要成为第一列,cbind或者之后使用列索引

lapply(town_list, \(x) 
    cbind(date = with(x, as.Date(ISOdate(year, month, day))), x))