这里发生了几件事。如果您提供可重现的示例并让我们知道哪里出了问题,您可以找到很多朋友。
以下是基于{tidyverse} 的方法。它适用于为您的每个国家/地区创建一个嵌套表。
我希望它能把你带到你想去的地方,并且你可以适应你的问题。
1.) 开始
作为第一个练习,将您的各种数据框绑定成一个大数据框。我模拟一些数据来建立一个数据框。如果这对您来说已经是一个问题,请阅读如何执行此操作。
library(tidyverse)
set.seed(666) # set seed and simulate data ---------------------------------
Airport <- rep(c("RJOO","LFPG","EHAM"), 5)
Day <- sample(c( as.POSIXct("1998-01-01")
,as.POSIXct("1998-01-02")
,as.POSIXct("1998-01-03") ), 15, replace = TRUE)
Average <- sample(c(12:25), 15, replace = TRUE)
df <- tibble(Airport, Day, Average)
这会产生:
df
# A tibble: 15 x 3
Airport Day Average
<chr> <dttm> <int>
1 RJOO 1998-01-02 00:00:00 19
2 LFPG 1998-01-02 00:00:00 18
3 EHAM 1998-01-03 00:00:00 13
4 RJOO 1998-01-03 00:00:00 12
5 LFPG 1998-01-02 00:00:00 21
6 EHAM 1998-01-01 00:00:00 17
7 RJOO 1998-01-01 00:00:00 19
8 LFPG 1998-01-01 00:00:00 20
9 EHAM 1998-01-02 00:00:00 15
10 RJOO 1998-01-03 00:00:00 22
11 LFPG 1998-01-01 00:00:00 24
12 EHAM 1998-01-01 00:00:00 19
13 RJOO 1998-01-03 00:00:00 21
14 LFPG 1998-01-03 00:00:00 19
15 EHAM 1998-01-02 00:00:00 18
2.) 关联国家/地区名称从您的示例中不清楚您如何关联国家/地区名称。我假设你知道你的方式。机场国际民航组织位置指示器(基本上是第一个或前 2 个字母)为您提供国家/地区。如果您有查找表,则可以将位置指示符(4 字母代码,RJOO)与国家/地区合并。您可以将查找表与{dplyr} 的left_join() 合并。
因为懒惰,我使用case_when() 继续前进。显然,您可能必须以不同的方式执行此操作。
# associate country names with data
df <- df %>%
mutate(Country = case_when( # a lazy look up for country name creation -----
Airport == "RJOO" ~ "Japan"
, Airport == "LFPG" ~ "France"
, Airport == "EHAM" ~ "Netherlands"
, TRUE ~ as.character(NA) )
) #----------------------------------------------------------------------------
你知道有以下几点:
# A tibble: 15 x 4
Airport Day Average Country
<chr> <dttm> <int> <chr>
1 RJOO 1998-01-02 00:00:00 19 Japan
2 LFPG 1998-01-02 00:00:00 18 France
3 EHAM 1998-01-03 00:00:00 13 Netherlands
4 RJOO 1998-01-03 00:00:00 12 Japan
5 LFPG 1998-01-02 00:00:00 21 France
6 EHAM 1998-01-01 00:00:00 17 Netherlands
7 RJOO 1998-01-01 00:00:00 19 Japan
8 LFPG 1998-01-01 00:00:00 20 France
9 EHAM 1998-01-02 00:00:00 15 Netherlands
10 RJOO 1998-01-03 00:00:00 22 Japan
11 LFPG 1998-01-01 00:00:00 24 France
12 EHAM 1998-01-01 00:00:00 19 Netherlands
13 RJOO 1998-01-03 00:00:00 21 Japan
14 LFPG 1998-01-03 00:00:00 19 France
15 EHAM 1998-01-02 00:00:00 18 Netherlands
3.) 嵌套数据框
嵌套数据框的创建非常简单。
df <- df %>% group_by(Country) %>% nest()
df
# A tibble: 3 x 2
# Groups: Country [3]
Country data
<chr> <list>
1 Japan <tibble [5 x 3]>
2 France <tibble [5 x 3]>
3 Netherlands <tibble [5 x 3]>
4.) 使用嵌套表格写出部分
首先,我们创建一个函数来帮助我们写出数据框/tibble 的国家/地区部分。
# utility function to write out country parts
write_country <- function(.ctry, .data){
fn <- paste0(.ctry, ".csv") # construct a filename to your liking
readr::write_csv(.data, fn)
}
# as we write out and the function does not return
# we use purrr's walk instead of map to iterate over the nested data
walk2( .x = df$Country # you have 2 variables, thus use walk2
, .y = df$data # define .x and .y vector
, .f = ~ write_country(.x, .y) # supply your function, watch the tilde ~
)
# you will now see 3 csv files: Japan.csv, France.csv, and Netherlands.csv
这个食谱应该适合你。
只需确保定义文件名,同时考虑文件夹结构和保存位置等。