为了为长数据创建一个 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/