gpt4 book ai didi

r - 如何使用 R 中我自己的自定义映射将值向量映射到另一个向量

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

这个问题在这里已经有了答案:





Replace values in a vector based on another vector

(2 个回答)


8年前关闭。




我想要一个函数,它的输入是一个由 1s、2s 和 3s 组成的向量,它发送 1 到 .2、2 到 .4 和 3 到 0.5。 (输出应该是一个等长的向量。)我该如何实现?

例如,如果

myVector<-c(1,2,3,2,3,3,1)

然后函数
mapVector(myVector)

应该返回一个像 (.2,.4,.5,.4,.5,.5,.2) 这样的向量

最佳答案

几个选项,都使用:

myVector<-c(1,2,3,2,3,3,1)

系数
newvals <- c(.2,.4,.5)
newvals[as.factor(myVector)]
#[1] 0.2 0.4 0.5 0.4 0.5 0.5 0.2

命名向量
newvals <- c(`1`=.2,`2`=.4,`3`=.5)
newvals
# 1 2 3
#0.2 0.4 0.5

newvals[as.character(myVector)]
# 1 2 3 2 3 3 1
#0.2 0.4 0.5 0.4 0.5 0.5 0.2

查找表
mapdf <- data.frame(old=c(1,2,3),new=c(.2,.4,.5))
mapdf$new[match(myVector,mapdf$old)]
#[1] 0.2 0.4 0.5 0.4 0.5 0.5 0.2

量化下面@Joe 评论的基准并解决@Ananda 的评论。
myVector <- c(1,2,3,2,3,3,1)
# setup for the benchmarking
test <- sample(myVector,1e6,replace=TRUE)
newvals <- c(.2,.4,.5)
newvalsvec <- c(`1`=.2,`2`=.4,`3`=.5)
mapdf <- data.frame(old=c(1,2,3),new=c(.2,.4,.5))

microbenchmark(
newvals[as.factor(test)],
newvalsvec[as.character(test)],
mapdf$new[match(test,mapdf$old)],
newvals[test],
times=10L
)

#Unit: milliseconds
# expr min lq median uq max
#factor 1863.40146 1876.04197 1890.99147 1913.13046 2014.23609
#namedvector 1809.26883 1812.76272 1837.18852 1851.42954 1858.44996
#lookup 38.48697 38.83405 39.90146 69.65140 71.75051
#newvals[test] 34.07380 34.55885 50.61287 65.69495 66.08699

关于r - 如何使用 R 中我自己的自定义映射将值向量映射到另一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456968/

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