【发布时间】:2021-01-25 13:14:31
【问题描述】:
鉴于数千个列表看起来像这样,我想将数千个列表从宽格式转换为长格式:
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,并将其转换为tibble() 格式。
dat_list %>% map_lgl(function(x) pivot_longer(-c(11)) )
UseMethod("pivot_longer") 中的错误:
没有适用于“c('double', 'numeric')”类对象的“pivot_longer”方法
这是一个包含一行和几个列表的可重现代码:
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
))
【问题讨论】: