如何通过列索引将数据框分为多个数据框

时间:2020-10-26 15:39:29

标签: r

我正在尝试处理下面指定的天气数据。我以为自己在正确的轨道上,但是没有在正确的庄园中使用pivot_longer,并且会导致部分重复。

任何人都可以提供有关如何编辑代码的建议吗?我想一种方法是将数据帧拆分为几个数据帧(即第一个数据帧-jan,年,第二个数据帧-feb,年)后执行ivot_longer。

maxT <- read.table('https://www.metoffice.gov.uk/pub/data/weather/uk/climate/datasets/Tmax/ranked/England_S.txt',  skip = 5, header = TRUE) %>%
  select(c(1:24)) %>%
  pivot_longer(cols = seq(2,24,2) , values_to = "year") %>%
  mutate_at(c(1:12), ~as.numeric(as.character(.))) %>%
  pivot_longer(cols = c(1:12), names_to = "month", values_to = "tmax") %>%
  mutate(month = match(str_to_title(month), month.abb),
         date = as.Date(paste(year, month, 1, sep = "-"), format = "%Y-%m-%d")) %>%
  select(-c("name","year","month")) %>%
  arrange(date)

2 个答案:

答案 0 :(得分:1)

这是<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <div id='main-menu' class='main-menu'> <div class='container-menu'> <nav class='navigation'> <span class='hamburger-menu'>Navigate <span class='burger-1'></span> <span class='burger-2'></span> <span class='burger-3'></span> </span> <ul class='core-menu'> <li><a href='#'>Product<span class='toggle'></span></a> <ul class='dropdown'> <li><a href='#'>Windows 10<span class='toggle2'></span></a></a> <ul class='dropdown2'> <li><a href='#'>Windows 10 Pro</a></li> <li><a href='#'>Windows 10 Home</a></li> <li><a href='#'>Profesional</a></li> </ul> </li> <li><a href='#'>Windows Phone</a></li> <li><a href='#'>Laptop</a></li> </ul> </li> <li><a href='#'>Featured<span class='toggle'></a> <ul class='dropdown'> <li><a href='#'>Cortana</a></li> <li><a href='#'>Xboct</a></li> <li><a href='#'>Microsoft Edge</a></li> </ul> </li> <li><a href='#'>Devices</a></li> <li><a href='#'>Help</a></li> </ul> </nav> </div> </div>的一个选项,使用tidyverse

map2

-输出

library(dplyr)
library(purrr)
list_df <- maxT %>% 
     select(seq(1, ncol(.), by = 2)) %>%
     map2(maxT %>% 
           select(seq(2, ncol(.), by = 2)), bind_cols) %>%
     imap( ~ .x %>% 
              rename(!! .y := `...1`, year = `...2`))

数据

map(list_df, head)
#$jan
# A tibble: 6 x 2
#    jan  year
#  <dbl> <int>
#1   9.9  1916
#2   9.8  2007
#3   9.7  1921
#4   9.7  2008
#5   9.5  1990
#6   9.4  1975

#$feb
# A tibble: 6 x 2
#    feb  year
#  <dbl> <int>
#1  11.2  2019
#2  10.7  1998
#3  10.7  1990
#4  10.3  2002
#5  10.3  1945
#6  10    2020
# ...

答案 1 :(得分:0)

我们可以使用split.default拆分2列的组。

list_df <- split.default(maxT, ceiling(seq_along(maxT)/2))

数据

maxT <- read.table('https://www.metoffice.gov.uk/pub/data/weather/uk/climate/datasets/Tmax/ranked/England_S.txt',  skip = 5, header = TRUE) %>%
  select(c(1:24))