gpt4 book ai didi

r - 一种更优雅的方式,将两个向量组合为单独的列(或数据帧),匹配行,并在不匹配的地方具有 NA

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

我有两个相同“事物”的向量,我想将它们组合成一个数据帧。每个向量将成为其自己的列,但它们将匹配相同的行,并在一个向量与第二个向量不匹配的情况下引入 NA 值。由于数据一开始只是两个向量,因此除了向量值之外,没有共同的 id 值或任何可匹配的内容。

我使用简单直接的方法在玩具数据测试中使用了它,但想知道是否有更直接和优雅的方法来做到这一点。

我当前的方法需要分配一个唯一的值,然后我可以通过该值合并两个向量,但我很好奇是否可以在没有它的情况下执行此操作并依赖向量值。我的其他尝试尝试不采用新的 id 值,探索诸如 merge 和 join、cbind、rbind、bind_rows、bind_cols、intersect 和 union 等函数。也许我没有充分利用它们。我在 SO 上发现了一些其他有用的帖子(例如 one ),但它们都已经以唯一标识符开头。

这是我的玩具数据测试,其中包含我想要的最终输出。最终输出是否有 id 列对我来说并不重要。请注意,我的实际数据将是字符,因此我在这里使用字母。

# create toy data
x <- letters[1:5]
y <- letters[2:6]
# combine into dataframe, keep only unique values & assign id
xy <- data.frame(xy=unique(c(x,y))); xy
xy$id <- 1:length(xy$xy); xy
# match id back to original toy data as dataframes
x <- data.frame(x)
x$id <- match(x$x, xy$xy)
y <- data.frame(y)
y$id <- match(y$y, xy$xy)
# merge using id
xy2 <- merge(x, y, by="id", all=TRUE)
xy2
# results in
id x y
1 1 a <NA>
2 2 b b
3 3 c c
4 4 d d
5 5 e e
6 6 <NA> f

最佳答案

使用tidyverse,您可以尝试使用full_join并根据您的2个向量创建 key :

library(tidyverse)

full_join(data.frame(key=x, x),
data.frame(key=y, y), by="key") %>%
select(-key)

或者,您可以在基础 R 中使用 merge:

merge(data.frame('key'=x, x), data.frame('key'=y, y), by='key', all=T)[-1]

输出

     x    y
1 a <NA>
2 b b
3 c c
4 d d
5 e e
6 <NA> f

关于r - 一种更优雅的方式,将两个向量组合为单独的列(或数据帧),匹配行,并在不匹配的地方具有 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62233556/

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