gpt4 book ai didi

r - 在 purrr::map2 中使用 dplyr::recode 时出现命名列表问题

转载 作者:行者123 更新时间:2023-12-04 12:10:21 25 4
gpt4 key购买 nike

我一直在研究 R purrr 包,但遇到了障碍。我在下面创建了一些模拟数据,它们代表了我的数据实际外观的一小部分。

library(tidyverse)

my_data <- tribble(
~lookup_lists, ~old_vectors,

# Observation 1
list(
"X1" = "one",
"X7" = "two",
"X16" = "three"
),

c("Col1", "Col2", "Col3", "X1", "X7", "X16"),

# Observation 2
list(
"X3" = "one",
"X8" = "two",
"X22" = "three"
),

c("Col1", "Col2", "Col3", "X3", "X8", "X22")
)

此时,我想创建一个新列,该列具有与 old_vectors 相同的向量值,但重新编码以 X 开头的值以反射(reflect)名为lookup_lists 中的列表。例如,我希望第一行来自:

c("Col1", "Col2", "Col3", "X1", "X7", "X16")

c("Col1", "Col2", "Col3", "one", "two", "three")

并保存到嵌套小标题中的新列。这是我使用 map2 函数的尝试:

# Add a third column that has the recoded vectors

my_data <- my_data %>%
mutate(new_vectors = map2(.x = old_vectors, .y = lookup_lists, .f = ~recode(.x, .y)))

#> Error in mutate_impl(.data, dots): Evaluation error: Argument 2 must be named, not unnamed.

我不明白这一点,因为第二个参数 IS 已命名。这是第一个观察结果的 lookup_list 来展示我的观点:

my_data$lookup_lists[[1]]
$X1
[1] "one"

$X7
[1] "two"

$X16
[1] "three"

我想我遗漏了一些非常明显的东西,可能与 this 有关.任何帮助将不胜感激!

最佳答案

由于 'lookup_lists' 是一个命名的 list,我们可以将它unlist 到一个命名的 vector 中,用它来匹配中的元素'old_vectors' 并替换具有与“键”与“old_vector”中的元素相匹配的值。不匹配的将是 NA。使用 na.omit 删除它并与“old_vectors”中的“Col”元素(使用 grep)连接

out <- my_data %>% 
mutate(new_vectors = map2(old_vectors, lookup_lists,
~ c(grep('Col', .x, value = TRUE), unname(na.omit(unlist(.y)[.x])))))
out$new_vectors
#[[1]]
#[1] "Col1" "Col2" "Col3" "one" "two" "three"

#[[2]]
#[1] "Col1" "Col2" "Col3" "one" "two" "three"

关于r - 在 purrr::map2 中使用 dplyr::recode 时出现命名列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com