gpt4 book ai didi

r - 按行/列名称在第三个维度上连接数据框

转载 作者:行者123 更新时间:2023-12-02 19:40:25 25 4
gpt4 key购买 nike

我有任意数量的数据框,带有行和列名称。

我的目标是使用行/列名称作为连接键在第三个维度上连接这些数据框,即我希望结果是一个命名的三维数组。

我的问题是我不想按位置加入它们,而是按行/列名称加入它们。

我知道我可以使用 abind() 沿任何所需维度连接数组,但 abind 是按位置连接数据,而不是按暗名称连接数据。

用 SQL 术语来说,我想要使用行/列名称作为连接键,但沿第三个维度进行完整连接。

这里有一个只有两个数据框的可重现的小示例:

first <- data.frame(one=c(1,2), two=c(3,4), row.names = c("one", "two"))
second <- data.frame(one=c(10,20), three=c(50,60), row.names = c("one", "three"))
result <- someMagicFunction(first, second)

我想要的“结果”对象输出是:

result <- array(data=c(1, 2, NA, 3, 4, NA, NA, NA, NA,
10, NA, 20, NA, NA, NA, 50, NA, 60),
dim = c(3, 3, 2),
dimnames = list(
c("one", "two", "three"),
c("one", "two", "three"),
c("first", "second")))
> result
, , first

one two three
one 1 3 NA
two 2 4 NA
three NA NA NA

, , second

one two three
one 10 NA 50
two NA NA NA
three 20 NA 60

我自己编写了一个函数来完成该任务,但我想知道是否已经有任何内置函数可以做到这一点。

谢谢!

最佳答案

library(abind)
library(magrittr)

in.dfs <- list(first, second)

cols <- unique(unlist(lapply(in.dfs, names)))
rows <- unique(unlist(lapply(in.dfs, rownames)))

allNA <-
matrix(NA, length(cols), length(rows)) %>%
`colnames<-`(cols) %>%
`rownames<-`(rows)

lapply(in.dfs, function(df){
allNA[rownames(df), names(df)] <- as.matrix(df)
allNA
}) %>%
list(along = 3) %>%
do.call(what = abind)

结果

# , , 1
#
# one two three
# one 1 3 NA
# two 2 4 NA
# three NA NA NA
#
# , , 2
#
# one two three
# one 10 NA 50
# two NA NA NA
# three 20 NA 60

关于r - 按行/列名称在第三个维度上连接数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52295131/

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