R:如何用不同数据框中的另一列替换一列?

R: How do I replace a column with another column from a different dataframe?

我想用 bipolar_ctl 数据帧的 Phenotype 列替换 ped 数据帧的第 第六列

我的尝试:

dplyr::mutate_at(ped, vars(-one_of("bipolar_ctl$Phenotype")))

使用基数 R,

ped[,6] = bipolar_ctl$Phenotype

另一种选择是:

ped$sixth_col = bipolar_ctl$Phenotype

注意两个数据集中可能出现不同的行顺序,这很容易在长脚本中发生。

您可以使用 match:

轻松考虑到这一点
ped[,6] <- bipolar_ctl[match(ped$id1, bipolar_ctl$id2), ]$Phenotype
ped
#   id1        V2        V3        V4        V5        V6        V7
# 1   1 0.9148060 0.5190959 0.4577418 0.9400145 0.4357716 0.5142118
# 2   2 0.9370754 0.7365883 0.7191123 0.9782264 0.9066014 0.3902035
# 3   3 0.2861395 0.1346666 0.9346722 0.1174874 0.6117786 0.9057381
# 4   4 0.8304476 0.6569923 0.2554288 0.4749971 0.2076590 0.4469696
# 5   5 0.6417455 0.7050648 0.4622928 0.5603327 0.3795592 0.8360043

或者,使用merge

merge(ped[-6], bipolar_ctl[c('id2', 'Phenotype')], by.x='id1', by.y='id2')
#   id        V2        V3        V4        V5        V7 Phenotype
# 1  1 0.9148060 0.5190959 0.4577418 0.9400145 0.5142118 0.4357716
# 2  2 0.9370754 0.7365883 0.7191123 0.9782264 0.3902035 0.9066014
# 3  3 0.2861395 0.1346666 0.9346722 0.1174874 0.9057381 0.6117786
# 4  4 0.8304476 0.6569923 0.2554288 0.4749971 0.4469696 0.2076590
# 5  5 0.6417455 0.7050648 0.4622928 0.5603327 0.8360043 0.3795592

或者使用 stopifnot

stopifnot(identical(ped$id1, bipolar_ctl$id2))
# Error: identical(ped$id1, bipolar_ctl$id2) is not TRUE

数据(id顺序不同):

set.seed(42)
ped <- cbind(id1=1:5, matrix(runif(30), 5, 6)) |> as.data.frame()
bipolar_ctl <- data.frame(id2=sample(1:5), Phenotype=runif(5))