我有两个 Dataframe 。第一个有数千列,代表一个给定的城市,后面跟着一年,像“伦敦_2001”,“伦敦_2002”,行中有一些测量值。第二个 Dataframe 有两列。第一个是领土区域,第二个是城市列表。类似于:
df1 <- data.frame(London_2021 = c(3,6,83,25,4),
London_2022 = c(3,6,83,25,4),
Berlin_2021 = c(3,6,83,25,4),
Berlin_2022 = c(3,6,83,25,4),
BerlinSuburbs_2021 = c(3,6,83,25,4),
BerlinSuburbs_2022 = c(3,6,83,25,4),
Tokyo_2021 = c(3,6,83,25,4),
Tokyo_2022 = c(3,6,83,25,4))
df2 <- data.frame(TerritorialRegion = c("Pacific", "Europe"),
Cities = c("Tokyo", "London, Berlin"))
我想创建一个列表,列表中的每个元素都是一个 Dataframe 。这个 Dataframe 将被称为领土区域,并将每个城市作为列。
在这种情况下,您的列表将类似于:
List
[1] Pacific
[2] Europe
如果你以list[2]
的方式访问欧洲,你会得到:
London_2021 | London_2022 | Berlin_2021 | Berlin_2022
正如您所看到的,我们需要严格相同的名称,因此BerlibSuburbs
不会出现在我们的 Dataframe 中,
我试过了,但不起作用:
library(dplyr)
library(tidyr)
# step 1
df2 <- df2 %>%
separate_rows(Cities, sep = ",\\s*")
# step 2
df1_long <- df1 %>%
pivot_longer(cols = everything(),
names_to = c("City", "Year"),
names_sep = "_")
# step 3
df_merged <- df2 %>%
left_join(df1_long, by = c("Cities" = "City"))
# step 4
df_list <- df_merged %>%
split(.$TerritorialRegion)
1条答案
按热度按时间7kqas0il1#
您可以使用
purrr
Map和dplyr::select
获得此输出其返回