r - 映射列表列并提取第一个列表项
问题描述
我有以下数据,如下所示:
# A tibble: 6 × 2
`Total_ Española_Porcentaje` `Total_ Extranjero_Porcentaje`
<list> <list>
1 <dbl [3]> <dbl [3]>
2 <dbl [3]> <dbl [3]>
3 <dbl [3]> <dbl [3]>
4 <dbl [3]> <dbl [3]>
5 <dbl [3]> <dbl [3]>
6 <dbl [3]> <dbl [3]>
我正在尝试使用map
并提取第一个dbl
.
我努力了
df %>%
map_dbl(., ~if(length(.x)) .x[1] else NA)
和
df %>%
imap_dfc(., function(x, y)
tibble(!!y := map_dbl(x, ~if(length(.x)) .x[1] else NA)))
但我无法让它工作。
Data <- structure(list(`Total_ Española_Porcentaje` = list(c(5.9, 5.9,
5.9), c(5.9, 5.9, 5.9), c(5.9, 5.9, 5.9), c(5.9, 5.9, 5.9), c(5.9,
5.9, 5.9), c(5.9, 5.9, 5.9)), `Total_ Extranjero_Porcentaje` = list(
c(5.9, 5.9, 5.9), c(5.9, 5.9, 5.9), c(5.9, 5.9, 5.9), c(5.9,
5.9, 5.9), c(5.9, 5.9, 5.9), c(5.9, 5.9, 5.9))), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
解决方案
我们可以使用across
循环遍历list
列,然后遍历的map
元素,list
大于0,选择元素或返回 NAif
length
first
else
library(dplyr)
library(purrr)
Data %>%
mutate(across(everything(),
~ map_dbl(., ~ if(length(.x) ) first(.x) else NA)))
# A tibble: 6 x 2
`Total_ Española_Porcentaje` `Total_ Extranjero_Porcentaje`
<dbl> <dbl>
1 5.9 5.9
2 5.9 5.9
3 5.9 5.9
4 5.9 5.9
5 5.9 5.9
6 5.9 5.9
或受@ThomasIsCoding 启发
map_dfr(Data, map_dbl, first)
# A tibble: 6 x 2
`Total_ Española_Porcentaje` `Total_ Extranjero_Porcentaje`
<dbl> <dbl>
1 5.9 5.9
2 5.9 5.9
3 5.9 5.9
4 5.9 5.9
5 5.9 5.9
6 5.9 5.9
推荐阅读
- angular6 - 是否可以在 ionic 4 中使 Tabs 可滑动?
- perl - 使用 perl 的 qx{} / `...` 运算符和参数列表
- c# - 如何通过将其与用户输入进行比较来搜索 int 数组与字符串数组
- groovy - 在 Groovy 中输入提示多维地图
- model - 如何使用模拟获得/确定该模型中的最佳组合(s,S)?
- c# - 在 Windows 10 IOT 上使用 I2C 从传感器读取问题
- r - 使用 R 进行数据集成
- python - 将数据复制到剪贴板管理器同上
- amazon-web-services - 使用 AWS Glue 加快开发周转时间
- javascript - 如何从添加到 html 页面的动态元素中获取数据?