微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将许多宽格式列表转换为长格式

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

   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_longer(-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)

如果我可以pivot_longer(),那么年份中的值通常会被赋予一个分配value的列名,因此在地图中分配landcover=value,并将其变成{{1} } 格式。

tibble()

使用方法错误(“pivot_longer”):
'pivot_longer' 没有适用的方法应用于类 "c('double','numeric')"

这是一个包含一行和几个列表的可重现代码

dat_list %>% map_lgl(function(x) pivot_longer(-c(11)) )

解决方法

您可以将 dat_listrbind 中的每个元素转置在一起。

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的{​​{1}}:

map_df

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。