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 创建
我们可以使用ISOdate
到transform
来创建Date
class
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))
我有一个包含大约 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 创建我们可以使用ISOdate
到transform
来创建Date
class
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))