gpt4 book ai didi

r - 合并两个 R 数据帧并识别每一行的来源

转载 作者:行者123 更新时间:2023-12-04 10:26:35 24 4
gpt4 key购买 nike

我的情况是,我需要将两个数据框合并在一起,每个数据框都包含一个关于研究主题的观察结果。不幸的是,数据捕获系统允许最终用户在两个屏幕上输入一些变量(例如,性别是在两个时间点捕获的,不应更改)。没有数据库端检查来确认屏幕之间的数据是否一致,因此我们正在检查后处理。

我想做的是使用内置的 R merge()使用 all=TRUE 合并数据帧的函数选项,以便我获得共享变量不匹配的两行,然后在结果数据框中有一个列,告诉我行的来源(来自合并中的 X 或 Y)。据我所知,merge() 中没有类似的东西。函数,所以我正在尝试为 merge() 编写自己的包装器这将做到这一点。

例子:

example_df1 <- data.frame(subject_id=c(101,102,103,104,105),
gender=c("M","F","M","M","F"),
weight=c(120,130,110,114,144),
score=c(10,12,11,13,11))

example_df2 <- data.frame(subject_id=c(101,102,103,104,105),
gender=c("M","M","M","M","F"),
weight=c(120,130,110,117,144),
site1=c(13,18,23,12,4),
site2=c(3,7,8,11,0),
site3=c(31,28,12,29,40))

merge(x=example_df1,y=example_df2,all=TRUE)

subject_id gender weight score site1 site2 site3
1 101 M 120 10 13 3 31
2 102 F 130 12 NA NA NA
3 102 M 130 NA 18 7 28
4 103 M 110 11 23 8 12
5 104 M 114 13 NA NA NA
6 104 M 117 NA 12 11 29
7 105 F 144 11 4 0 40

期望的输出:
  subject_id gender weight score site1 site2 site3 rowsource
1 101 M 120 10 13 3 31 both
2 102 F 130 12 NA NA NA x
3 102 M 130 NA 18 7 28 y
4 103 M 110 11 23 8 12 both
5 104 M 114 13 NA NA NA x
6 104 M 117 NA 12 11 29 y
7 105 F 144 11 4 0 40 both

由于项目周围的监管环境,如果可能的话,我需要在没有任何特殊包的情况下在 base R 中实现解决方案。我最初的想法是尝试使用 intersect找到两个 example_df1 之间的公共(public)变量和 example_df2 ,然后以某种方式将合并结果的每一行(在这些公共(public)变量内)与 example_df1 进行比较和 example_df2找出行的来源。这看起来真的很笨拙,所以我很感激有关如何提高此类任务效率的建议。谢谢!

编辑添加:如果在这种类型的合并中,R 总是始终将 X 行放在 Y 行上方,我想这也可以工作,但我认为我对比这更稳定的东西感觉更好。

最佳答案

我只想在合并之前添加另一列以使生活更轻松:

example_df1$source <- "X"
example_df2$source <- "Y"
Merged <- merge(x = example_df1, y = example_df2,
all = TRUE, by = c("subject_id", "gender", "weight"))
Merged$rowSource <- apply(Merged[c("source.x", "source.y")], 1,
function(x) paste(na.omit(x), collapse = ""))
Merged
# subject_id gender weight score source.x site1 site2 site3 source.y rowSource
# 1 101 M 120 10 X 13 3 31 Y XY
# 2 102 F 130 12 X NA NA NA <NA> X
# 3 102 M 130 NA <NA> 18 7 28 Y Y
# 4 103 M 110 11 X 23 8 12 Y XY
# 5 104 M 114 13 X NA NA NA <NA> X
# 6 104 M 117 NA <NA> 12 11 29 Y Y
# 7 105 F 144 11 X 4 0 40 Y XY

从那里,应该很容易改变 "XY""both"如果这是您在输出中喜欢的内容,则可以删除“source.x”和“source.y”列....

关于r - 合并两个 R 数据帧并识别每一行的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com