我有一个这样的数据集:
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))
但似乎无法破解它。
希望这是你想要的
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