r - 根据模板多次替换值

标签 r

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

相关文章:

将列值替换为另一个值

javascript - 将表单从 R 提交到混合 HTML 和 Javascript

r - 隐藏 Shiny 的输出

r - 如何创建一个等于 R 数据框中另一列的前 5 个观察结果的乘积的列?

r - 如何将对数图的值从指数表示法更改为点阵包中的数值?

r - 在 R 中构建一个循环,将所有行写入单独的文件中,每个文件一行

R:Quantstrat 如何进行投资组合中完整股权的交易?

r - 将表达式传递给 data.table 中的嵌套分组

r - bsplus : Carousel for dynamic number of plots in Shiny

r - 使用 strsplit 模式匹配将字符串分散到多列中