两列之间的自定义模式匹配和替换以保持列内组一致

问题描述 投票:0回答:1

我有一个这样的数据集:

dat <- read.table(text = "
   var seq1 seq2
1   A1    1    4
2   AL    1    4
3    E    1    2
4    F    1    4
5   A3    2    3
6   A6    2    3
7   Si    2    3
8   A5    3    2
9   IN    3    2
10  Z5    3    2  
", header = TRUE)

我需要进行一些自定义列匹配,以便当变量在列之间进行类似分组时,它们会采用第一列的值。 ex A5,IN,Z5 在两列中的分组方式类似,因此它们在第二列中都应为 3。诀窍是,我还需要组在第二列内保持一致,因此变量 E 例如也需要从 2 更改为 3。

所需输出:

dat2 <- read.table(text = "
   var seq1 seq2
1   A1    1    1
2   AL    1    1
3    E    1    3
4    F    1    1
5   A3    2    2
6   A6    2    2
7   Si    2    2
8   A5    3    3
9   IN    3    3
10  Z5    3    3  
", header = TRUE)

我尝试过以下各种组合:

dat <- dat %>%
rowwise%>%
  mutate('seq2' = ifelse(dat$seq==dat$seq2,dat$seq,dat$seq2))

但似乎无法破解它。

r replace matching col
1个回答
0
投票

希望这是你想要的

transform(
    dat,
    seq2 = as.numeric(ave(seq1, seq2, FUN = \(x) names(which.max(table(x)))))
)

这给出了

   var seq1 seq2
1   A1    1    1
2   AL    1    1
3    E    1    3
4    F    1    1
5   A3    2    2
6   A6    2    2
7   Si    2    2
8   A5    3    3
9   IN    3    3
10  Z5    3    3
© www.soinside.com 2019 - 2024. All rights reserved.