R 将许多宽格式的列表转换为长格式

R 将许多宽格式的列表转换为长格式,r,reshape,R,Reshape,我想将数千个列表从宽格式转换为长格式,因为数千个列表如下所示: y2010 y2011 y2012 y2013 y2014 y2015 y2016 y2017 y2018 y2019 coverage_fraction 4 12 12 12 12 12 12 12 12 12 12 0.0005232538 9 12 12 12 12 12 12 12 12 12

我想将数千个列表从宽格式转换为长格式,因为数千个列表如下所示:

   y2010 y2011 y2012 y2013 y2014 y2015 y2016 y2017 y2018 y2019 coverage_fraction
4     12    12    12    12    12    12    12    12    12    12      0.0005232538
9     12    12    12    12    12    12    12    12    12    12      0.1390771568
10    12    12    12    12    12    12    12    12    12    12      0.7728050947
. 
.
46    12    12    12    12    12    12    12    12    12    12      0.0005232538     
是否有一种方法可以将
pivot\u加长(-c(11)
放入一个函数中,比如
mapply()
,将每个列表中的列更改为长格式,同时保留单个列表元素

基本上,我想使用以下代码:

lc_extract_pred <- landcover %>% 
  exact_extract(r_cells, progress = FALSE) %>% *Convert from wide to long here* %>%
  map(~ count(., landcover=value)) %>% 
  tibble(id = r_cells$id, data = .) %>% 
  unnest(data)
UseMethod(“pivot_longer”)中出错:
“pivot_不再”的适用方法不适用于类“c('double','numeric')的对象

这是一个可复制的代码,包含一行和几个列表:

list(c(y2010 = 1, y2011 = 1, y2012 = 1, y2013 = 1, y2014 = 1, 
y2015 = 1, y2016 = 1, y2017 = 1, y2018 = 1, y2019 = 1, coverage_fraction = -1.33003238502638
), c(y2010 = 1, y2011 = 1, y2012 = 1, y2013 = 1, y2014 = 1, y2015 = 1, 
y2016 = 1, y2017 = 1, y2018 = 1, y2019 = 1, coverage_fraction = 0.682342381930735
), c(y2010 = 1, y2011 = 1, y2012 = 1, y2013 = 1, y2014 = 1, y2015 = 1, 
y2016 = 1, y2017 = 1, y2018 = 1, y2019 = 1, coverage_fraction = -2.09817126581704
), c(y2010 = 1, y2011 = 1, y2012 = 1, y2013 = 1, y2014 = 1, y2015 = 1, 
y2016 = 1, y2017 = 1, y2018 = 1, y2019 = 1, coverage_fraction = -0.0942304747486628
), c(y2010 = 1, y2011 = 1, y2012 = 1, y2013 = 1, y2014 = 1, y2015 = 1, 
y2016 = 1, y2017 = 1, y2018 = 1, y2019 = 1, coverage_fraction = -0.944268346233405
))

您可以将
dat_列表
rbind
中的每个元素一起转置

result <- do.call(rbind.data.frame, lapply(dat_list, t))

#  y2010 y2011 y2012 y2013 y2014 y2015 y2016 y2017 y2018 y2019 coverage_fraction
#1     1     1     1     1     1     1     1     1     1     1       -1.33003239
#2     1     1     1     1     1     1     1     1     1     1        0.68234238
#3     1     1     1     1     1     1     1     1     1     1       -2.09817127
#4     1     1     1     1     1     1     1     1     1     1       -0.09423047
#5     1     1     1     1     1     1     1     1     1     1       -0.94426835
result <- do.call(rbind.data.frame, lapply(dat_list, t))

#  y2010 y2011 y2012 y2013 y2014 y2015 y2016 y2017 y2018 y2019 coverage_fraction
#1     1     1     1     1     1     1     1     1     1     1       -1.33003239
#2     1     1     1     1     1     1     1     1     1     1        0.68234238
#3     1     1     1     1     1     1     1     1     1     1       -2.09817127
#4     1     1     1     1     1     1     1     1     1     1       -0.09423047
#5     1     1     1     1     1     1     1     1     1     1       -0.94426835
purrr::map_df(dat_list, ~as.data.frame(t(.x)))