首页 > 解决方案 > 在R中的嵌套表中从带有日、月、年的单独列创建日期

问题描述

我正在处理嵌套表中的水文数据。除了流(Q)之外,我将日期分为 3 列(一列表示天,第二列表示月,第三列表示年)。

year_2008 <- list("910" = data.frame(Year = c(2008), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
             "950" = data.frame(Year = c(2008), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
             "1012" = data.frame(Year = c(2008), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
              "1087" = data.frame(Year = c(2008), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)))


year_2009 <- list("910" = data.frame(Year = c(2009), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
                  "950" = data.frame(Year = c(2009), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
                  "1012" = data.frame(Year = c(2009), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)),
                  "1087" = data.frame(Year = c(2009), Day=c(1:5), Month= c(1, 1, 1, 1 ,1)))

这是一个嵌套表。

year_list <- list (year_2008, year_2009)
names(year_list) <- c("2008", "2009")

我正在尝试将这 3 列中的信息收集到一个单独的列中,该列将显示一个日期(在一个名为“日期”的新列中)。我创建了一个函数来创建日期列:

transform_date2 <- function(x) {x$date <- as.Date(with(x, paste(x$Day, x$Month, x$Year, sep="-")), "%d-%m-%Y")}

我尝试将该函数应用于嵌套表:

result1 <- lapply(year_list, `[[`, transform_date2)

这会导致错误: FUN(X[[i]], ...) 中的错误:无效的下标类型“闭包”

我试着做一个循环:

result2 <- for (i in 1:seq_along(year_list)) {transform_date2}

这将导致:警告消息:在 1:seq_along(year_list) 中:数值表达式有 2 个元素:仅使用第一个元素

我觉得我在访问嵌套表的正确“级别”时遇到问题。

我的最终目标是保持当前格式(嵌套表),删除每个嵌套表中的 Day、Month、Year 列,在每个嵌套表中创建日期列并保留 Q 列。请帮忙

标签: r

解决方案


因为它是一个嵌套列表,所以使用嵌套lapply

year_list <- lapply(year_list, function(x) lapply(x, transform_date2))

哪里transform_date2是:

transform_date2 <- function(x) {x$date <- as.Date(with(x, paste(x$Day, x$Month, x$Year, sep="-")), "%d-%m-%Y");x}

推荐阅读