gpt4 book ai didi

r - 合并/合并具有相同名称但数据不完整的列

转载 作者:行者123 更新时间:2023-12-03 13:20:00 28 4
gpt4 key购买 nike

我有两个数据框,其中一些列名称相同,而另一些列名称不同。数据框看起来像这样:

df1
ID hello world hockey soccer
1 1 NA NA 7 4
2 2 NA NA 2 5
3 3 10 8 8 23
4 4 4 17 5 12
5 5 NA NA 3 43

df2
ID hello world football baseball
1 1 2 3 43 6
2 2 5 1 24 32
3 3 NA NA 2 23
4 4 NA NA 5 15
5 5 9 7 12 23

如您所见,在 2 个共享列(“hello”和“world”)中,一些数据位于其中一个数据框中,其余数据位于另一个中。

我想要做的是(1)通过“id”合并2个数据帧,(2)将两个帧中“hello”和“world”列的所有数据合并为1个“hello”列和1个“world” "列,并且 (3) 的最终数据帧还包含 2 个原始帧中的所有其他列(“曲棍球”、“足球”、“足球”、“棒球”)。所以,我希望最终的结果是这样的:
  ID hello world hockey soccer football baseball
1 1 2 3 7 4 43 6
2 2 5 3 2 5 24 32
3 3 10 8 8 23 2 23
4 4 4 17 5 12 5 15
5 5 9 7 3 43 12 23

我是 R 的新手,所以我尝试过的唯一代码是 merge 的变体我已经尝试了我在这里找到的答案,该答案基于类似的问题: R: merging copies of the same variable .然而,我的数据集实际上比我在这里显示的要大得多(大约有 20 个匹配的列(如“hello”和“world”)和 100 个不匹配的列(如“曲棍球”和“足球”))所以我正在寻找不需要我手动将它们全部写出来的东西。

知道这是否可以做到吗?很抱歉,我无法提供我的努力样本,但除了以下内容之外,我真的不知道从哪里开始:
mydata <- merge(df1, df2, by=c("ID"), all = TRUE)

要重现数据帧:
df1 <- structure(list(ID = c(1L, 2L, 3L, 4L, 5L), hellow = c(2, 5, NA, NA, 9), 
world = c(3, 1, NA, NA, 7), football = c(43, 24, 2, 5, 12),
baseball = c(6, 32, 23, 15, 23)), .Names = c("ID", "hello", "world",
"football", "baseball"), class = "data.frame", row.names = c(NA, -5L))

df2 <- structure(list(ID = c(1L, 2L, 3L, 4L, 5L), hellow = c(NA, NA, 10, 4, NA),
world = c(NA, NA, 8, 17, NA), hockey = c(7, 2, 8, 5, 3),
soccer = c(4, 5, 23, 12, 43)), .Names = c("ID", "hello", "world", "hockey",
"soccer"), class = "data.frame", row.names = c(NA, -5L))

最佳答案

这是一种涉及 melt 的方法处理您的数据,合并熔融数据,并使用 dcast使其恢复到广泛的形式。我添加了评论以帮助了解正在发生的事情。

## Required packages
library(data.table)
library(reshape2)

dcast.data.table(
merge(
## melt the first data.frame and set the key as ID and variable
setkey(melt(as.data.table(df1), id.vars = "ID"), ID, variable),
## melt the second data.frame
melt(as.data.table(df2), id.vars = "ID"),
## you'll have 2 value columns...
all = TRUE)[, value := ifelse(
## ... combine them into 1 with ifelse
is.na(value.x), value.y, value.x)],
## This is your reshaping formula
ID ~ variable, value.var = "value")
# ID hello world football baseball hockey soccer
# 1: 1 2 3 43 6 7 4
# 2: 2 5 1 24 32 2 5
# 3: 3 10 8 2 23 8 23
# 4: 4 4 17 5 15 5 12
# 5: 5 9 7 12 23 3 43

关于r - 合并/合并具有相同名称但数据不完整的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167151/

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