如何解决将许多宽格式列表转换为长格式
鉴于数千个列表如下所示,我想将数千个列表从宽格式转换为长格式:
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_list
和 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
或者使用purrr
的{{1}}:
map_df
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。