gpt4 book ai didi

r - 合并 R 中的数据列

转载 作者:行者123 更新时间:2023-12-01 22:57:13 26 4
gpt4 key购买 nike

我有一种情况,我有来自不同时间段的两个不同数据集。虽然许多列是相同的,但有些不是。这些“不同”的列是应该保留的辅助数据。

我想合并这两个数据集,让 NA 值不存在。注意这两个表没有任何外键,不应该连接,只是堆叠在一起。

例子:

data.a <- structure(list(lat = c(50L, -30L, -33L), lon = c(-40L, -30L, 
-50L), mag = c(3.5, 1.1, 2.3)), .Names = c("lat", "lon", "mag"
), class = "data.frame", row.names = c(NA, -3L))

data.b <- structure(list(lat = c(44L, -30L, -33L), lon = c(-40L, -30L,
-55L), elev = c(1050, 2.4, 2.3)), .Names = c("lat", "lon", "elev"
), class = "data.frame", row.names = c(NA, -3L))

data.a
lat lon mag
50 -40 3.5
-30 -30 1.1
-33 -50 2.3

data.b
lat lon elev
44 -40 1050.0
-30 -30 2.4
-33 -55 2.3

预期结果:
lat lon mag   elev
50 -40 3.5 NA
-30 -30 1.1 NA
-33 -50 2.3 NA
44 -40 NA 1050.0
-30 -30 NA 2.4
-33 -55 NA 2.3

实现此结果的最佳方法是什么?我看到有很多实用程序可以执行连接,但我不确定如何执行此操作。

最佳答案

或者更现代的 dplyr :

dplyr::bind_rows(data.a, data.b)

## Source: local data frame [6 x 4]
##
## lat lon mag elev
## (int) (int) (dbl) (dbl)
## 1 50 -40 3.5 NA
## 2 -30 -30 1.1 NA
## 3 -33 -50 2.3 NA
## 4 44 -40 NA 1050.0
## 5 -30 -30 NA 2.4
## 6 -33 -55 NA 2.3

data.table :
data.table::rbindlist(list(data.a, data.b), fill=TRUE)

## lat lon mag elev
## 1: 50 -40 3.5 NA
## 2: -30 -30 1.1 NA
## 3: -33 -50 2.3 NA
## 4: 44 -40 NA 1050.0
## 5: -30 -30 NA 2.4
## 6: -33 -55 NA 2.3

gtools :
gtools::smartbind(data.a, data.b)

## lat lon mag elev
## 1:1 50 -40 3.5 NA
## 1:2 -30 -30 1.1 NA
## 1:3 -33 -50 2.3 NA
## 2:1 44 -40 NA 1050.0
## 2:2 -30 -30 NA 2.4
## 2:3 -33 -55 NA 2.3

或者,如果您不想使用任何软件包:
rbind_fill <- function(...) {
dfs <- list(...)
cols <- Reduce(union, lapply(dfs, colnames))
do.call(rbind, lapply(dfs, function(df) {
df_cols <- setdiff(cols, colnames(df))
df[,df_cols] <- NA
df
}))
}

rbind_fill(data.a, data.b)

## lat lon mag elev
## 1 50 -40 3.5 NA
## 2 -30 -30 1.1 NA
## 3 -33 -50 2.3 NA
## 4 44 -40 NA 1050.0
## 5 -30 -30 NA 2.4
## 6 -33 -55 NA 2.3

关于r - 合并 R 中的数据列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598370/

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