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