gpt4 book ai didi

r - 在R中反转匹配操作

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

我有兴趣根据其索引元素分解来重建原始向量。例如,假设我有以下字符串向量:

v <- c( "a", "a", "b", "c", "b", "a", "c" )

采用 the question about matching all occurrences ,我们可以将这个向量分解成它的索引元素对,如下所示:

library( tidyverse )
dcomp <- set_names(letters[1:3]) %>% map( ~which(v==.x) )
# $a
# [1] 1 2 6
#
# $b
# [1] 3 5
#
# $c
# [1] 4 7

我正在寻找一种优雅的方法来反转此操作并重建原始向量 v来自 dcomp .使用循环的最直接的解决方案需要预先初始化结果容器,并且不能通过 %>% 与 dplyr 风格的管道很好地配合使用。 :

## BAD SOLUTION #1
u <- c()
for( i in names(dcomp) )
u[ dcomp[[i]] ] <- i
all( u == v ) ## TRUE

使用 purrr::iwalk 确实%>% 配合得很好管道,但它仍然需要预初始化 u并使用经常受到批评的<<- (否则 u 赋值在计算公式的环境之外是不可见的)。

## BAD SOLUTION #2
u <- c()
dcomp %>% iwalk( ~(u[.x] <<- .y) )
all( u == v ) ## TRUE

有没有一种方法可以使用预先指定的元素到索引的映射来“即时”构建结果,并且可以与 %>% 很好地集成?管道? dcomp的结构只要保留映射,就允许更改。

最佳答案

怎么样

rep(names(dcomp), lengths(dcomp))[order(unlist(dcomp))]

把它变成一个函数

reconstruct <- function(x) rep(names(x), lengths(x))[order(unlist(x))]
dcomp %>% reconstruct()

关于r - 在R中反转匹配操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358180/

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