使用 lapply 或 Map 操作数据帧列表中的相同变量
Manipulate same variable in a list of dataframes using lapply or Map
我通过使用 this 优雅的 lapply
解决方案成功地导入了 10 个 .csv
文件。
现在的输出是 list
of 10 data.frames
。
每个 data.frame 包含变量 year
和 value
:
file_names <- dir("../XYZ", pattern = glob2rx("*.csv"))
data_list <- lapply(filenames, read.table, header = TRUE)
head(data_list[[1]])
year value
1 200712 2320,00
2 200712 120,00
3 200712 188,00
4 200712 1328,00
5 200712 46,00
6 200712 98,00
head(data_list[[2]])
year value
1 200812 320,00
2 200812 1120,00
3 200812 1288,00
4 200812 1128,00
5 200812 746,00
6 200812 938,00
不幸的是,变量 year
的格式是 yyyymm
,但我希望它是 yyyy
.
因此我想使用另一个 lapply
或 Map
来更改每个 data.frame 中 year
的格式。类似于:
data_list <- lapply(data_list[["year"]], FUN = substr(1,4), ... )
或:
data_list <- Map(substr(1,4), data_list, "year")
但这行不通...有什么想法吗?
你可以试试
data_list <- lapply(data_list, function(x) {x$year <- substr(x$year, 1,4)
x})
我通过使用 this 优雅的 lapply
解决方案成功地导入了 10 个 .csv
文件。
现在的输出是 list
of 10 data.frames
。
每个 data.frame 包含变量 year
和 value
:
file_names <- dir("../XYZ", pattern = glob2rx("*.csv"))
data_list <- lapply(filenames, read.table, header = TRUE)
head(data_list[[1]])
year value
1 200712 2320,00
2 200712 120,00
3 200712 188,00
4 200712 1328,00
5 200712 46,00
6 200712 98,00
head(data_list[[2]])
year value
1 200812 320,00
2 200812 1120,00
3 200812 1288,00
4 200812 1128,00
5 200812 746,00
6 200812 938,00
不幸的是,变量 year
的格式是 yyyymm
,但我希望它是 yyyy
.
因此我想使用另一个 lapply
或 Map
来更改每个 data.frame 中 year
的格式。类似于:
data_list <- lapply(data_list[["year"]], FUN = substr(1,4), ... )
或:
data_list <- Map(substr(1,4), data_list, "year")
但这行不通...有什么想法吗?
你可以试试
data_list <- lapply(data_list, function(x) {x$year <- substr(x$year, 1,4)
x})