gpt4 book ai didi

r - 根据模板多次替换值

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

为了为长数据创建一个 GROUP VARIABLE,我想将多个值分组为一个新值。

我已经有了一个解决方案,但我觉得可以有更好的实现。

set.seed(1337)
df <- data.frame(coli = sample(rep(1:6,2)), newi = 0 )

replaceList <- list(oneAndTwo=1:2, threeAndFour=3:4, fiveAndSix=5:6)

数据看起来像:
> df
coli newi
1 1 0
2 6 0
3 1 0
4 5 0
5 3 0
6 2 0
7 6 0
8 2 0
9 4 0
10 4 0
11 3 0
12 5 0

查找模板如下所示:
> replaceList
$oneAndTwo
[1] 1 2

$threeAndFour
[1] 3 4

$fiveAndSix
[1] 5 6

想要的结果:
   coli         newi
1 1 oneAndTwo
2 6 fiveAndSix
3 1 oneAndTwo
4 5 fiveAndSix
5 3 threeAndFour
6 2 oneAndTwo
7 6 fiveAndSix
8 2 oneAndTwo
9 4 threeAndFour
10 4 threeAndFour
11 3 threeAndFour
12 5 fiveAndSix

我的工作尝试
mapply(function(fnd,rplc){IND=df$coli %in% fnd;df$newi[IND]<<-rplc},fnd=replaceList,rplc=names(replaceList))

如果有更好的做法,还有关于如何设置 replaceList我很高兴学习。

您将如何解决/处理这样的问题?

最佳答案

我们可以stack list到键/值数据集('df2'),然后执行 match在“df”的“coli”与“df2”的“values”列之间,获取“ind”的相应索引并将其分配给“newi”

df2 <- stack(replaceList)
df$newi <- df2$ind[match(df$coli, df2$values)]
df
# coli newi
#1 4 threeAndFour
#2 3 threeAndFour
#3 6 fiveAndSix
#4 1 oneAndTwo
#5 2 oneAndTwo
#6 1 oneAndTwo
#7 5 fiveAndSix
#8 2 oneAndTwo
#9 4 threeAndFour
#10 6 fiveAndSix
#11 3 threeAndFour
#12 5 fiveAndSix

关于r - 根据模板多次替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253506/

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