r语言 - 从数据帧列表创建两个dfs



我有一个数据帧列表

a <- data.frame(V1=c("Dzienna",4.12,"czas", "2022-01-01 00:00:00", "2022-01-01 01:00:00"), 
V2=c(NA,NA,"Moc", 0.13, 1.15)
)
b <- data.frame(V1=c("Dzienna",5.17,"czas", "2022-02-01 00:00:00", "2022-02-01 01:00:00"), 
V2=c(NA,NA,"Moc", 0.18, 2.05)
)
L1 <- list(a, b)
L1

我想要得到两个数据帧,看起来像

下面
Dzienna.prod       Data
1         4.12 2022-01-01
2         5.17 2022-02-01

Czas  Moc
1 2022-01-01 00:00:00 0.13
2 2022-01-01 01:00:00 1.15
3 2022-02-01 00:00:00 0.18
4 2022-02-01 01:00:00 2.05

我正在尝试使用lapply和do来实现目标。呼叫,但至今未成功

假设每个df都具有此模式,则可以将列表中的每个数据帧转换为所需的格式。此外,从tidyverse标签,我假设我可以使用dplyr函数。

对于df1,我看到的唯一模式是来自第2行第1列的数字值和来自第4行第1列的日期

f1 <- function(df) {
data.frame(t(df[c(2, 4), 1])) %>% 
mutate(X2 =  as.Date(X2)) %>% 
rename(Dzienna.prod = X1, Data = X2)
}
df1 <- bind_rows(lapply(L1, f1))
> df1
Dzienna.prod       Data
1         4.12 2022-01-01
2         5.17 2022-02-01

对于f1,我假设列Data只是来自数据帧中的日期时间的日期。

对于第二个数据帧,我认识到的唯一模式是它来自列表中数据帧的第4行和第5行。

f2 <- function(df) {
df[4:nrow(L1[[1]]),] %>% rename(Czas = V1, Moc=V2)
}

df2 <- bind_rows(lapply(L1, f2))
> df2
Czas  Moc
1 2022-01-01 00:00:00 0.13
2 2022-01-01 01:00:00 1.15
3 2022-02-01 00:00:00 0.18
4 2022-02-01 01:00:00 2.05

最新更新