使用整洁原则从 R 中的列表列表中提取元素
Pull elements from a list of lists in R using tidy principles
我有一个列表列表,我希望从每个列表中提取特定元素并将结果存储在数据框中。
对于每个 VendorNum
,我希望提取 n
和 MAD.conformity
。在下面的例子中有 4 VendorNum
.
列表列表可以通过运行以下块获得:
result <- top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount))
使用 map_dfr
和 extract
我可以从每个列表中提取一个元素,但是当我添加其他元素时 运行 会出错。
这是我正在使用的代表:
library(dplyr)
library(purrr)
library(benford.analysis)
data(corporate.payment)
# FIND VENDORS WITH A SIGNIFICANT NUMBER OF ROWS
vendor_records <- corporate.payment %>%
group_by(VendorNum) %>%
summarise(records = n()) %>%
arrange(desc(records))
# FILTER FOR THESE VENDORS
top_vendors <- corporate.payment %>%
filter(VendorNum %in% c('3630','6661','2001','4984'))
result <- top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>%
map_dfr(magrittr::extract, c("MAD.conformity"), .id = "VendorNum")
当我将元素向量添加到提取函数时,出现以下错误:
map_dfr(magrittr::extract, c("MAD.conformity","n"), .id = "VendorNum")
Error:
! Column names `MAD.conformity`, `MAD.conformity`, and `MAD.conformity` must not be duplicated.
Use .name_repair to specify repair.
Caused by error in `stop_vctrs()`:
! Names must be unique.
x These names are duplicated:
* "MAD.conformity" at locations 1, 2, 3, and 4.
Run `rlang::last_error()` to see where the error occurred.
Warning message:
Outer names are only allowed for unnamed scalar atomic inputs
如果你能帮我弄清楚如何将额外的元素提取到数据框中,我将不胜感激。
to_extract <- list(MAD.conformity = c('MAD.conformity'),
n = c('info', 'n'))
top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>%
map_df(~map(to_extract, ~.y[[.x]], .x), .id = 'VendorNum')
# A tibble: 4 x 3
VendorNum MAD.conformity n
<chr> <chr> <int>
1 2001 Nonconformity 4735
2 3630 Acceptable conformity 13361
3 4984 Acceptable conformity 4311
4 6661 Nonconformity 4133
我有一个列表列表,我希望从每个列表中提取特定元素并将结果存储在数据框中。
对于每个 VendorNum
,我希望提取 n
和 MAD.conformity
。在下面的例子中有 4 VendorNum
.
列表列表可以通过运行以下块获得:
result <- top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount))
使用 map_dfr
和 extract
我可以从每个列表中提取一个元素,但是当我添加其他元素时 运行 会出错。
这是我正在使用的代表:
library(dplyr)
library(purrr)
library(benford.analysis)
data(corporate.payment)
# FIND VENDORS WITH A SIGNIFICANT NUMBER OF ROWS
vendor_records <- corporate.payment %>%
group_by(VendorNum) %>%
summarise(records = n()) %>%
arrange(desc(records))
# FILTER FOR THESE VENDORS
top_vendors <- corporate.payment %>%
filter(VendorNum %in% c('3630','6661','2001','4984'))
result <- top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>%
map_dfr(magrittr::extract, c("MAD.conformity"), .id = "VendorNum")
当我将元素向量添加到提取函数时,出现以下错误:
map_dfr(magrittr::extract, c("MAD.conformity","n"), .id = "VendorNum")
Error:
! Column names `MAD.conformity`, `MAD.conformity`, and `MAD.conformity` must not be duplicated.
Use .name_repair to specify repair.
Caused by error in `stop_vctrs()`:
! Names must be unique.
x These names are duplicated:
* "MAD.conformity" at locations 1, 2, 3, and 4.
Run `rlang::last_error()` to see where the error occurred.
Warning message:
Outer names are only allowed for unnamed scalar atomic inputs
如果你能帮我弄清楚如何将额外的元素提取到数据框中,我将不胜感激。
to_extract <- list(MAD.conformity = c('MAD.conformity'),
n = c('info', 'n'))
top_vendors %>%
split(.$VendorNum) %>%
map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>%
map_df(~map(to_extract, ~.y[[.x]], .x), .id = 'VendorNum')
# A tibble: 4 x 3
VendorNum MAD.conformity n
<chr> <chr> <int>
1 2001 Nonconformity 4735
2 3630 Acceptable conformity 13361
3 4984 Acceptable conformity 4311
4 6661 Nonconformity 4133