如何使用dplyr函数顺序连接两个数据帧?

用户名

我正在尝试顺序加入数据帧:

library(dplyr)
set.seed(1)
a <- 1:6
b <- rnorm(length(a))

df <- data.frame(a = a)

我的预期结果是

df_target <- data.frame(a = a, b = b)
df_target

  a          b
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
4 4  1.5952808
5 5  0.3295078
6 6 -0.8204684

首先,我要“添加”以下数据帧的b列(向量的前3个条目,b它们属于的前3个条目a

df_to_add1 <- data.frame(a = a[1:3], b = b[1:3])

这可以通过以下方式实现left_joindplyr包。

df1 <- left_join(df, df_to_add1)
df1

  a          b
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
4 4         NA
5 5         NA
6 6         NA

接下来,我要附加其余部分,即该对象的最后3个条目b属于:的最后3个条目a

df_to_add2 <- data.frame(a = a[4:6], b = b[4:6])

如果我left_join再次使用,则不会添加任何内容

left_join(df1, df_to_add2)

Joining, by = c("a", "b")
  a          b
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
4 4         NA
5 5         NA
6 6         NA

如果我使用full_join,那么这就是我想要的,但是有重复的行:

full_join(df1, df_to_add2)

Joining, by = c("a", "b")

  a          b
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
4 4         NA
5 5         NA
6 6         NA
7 4  1.5952808
8 5  0.3295078
9 6 -0.8204684

我可以通过删除重复的行来获得目标:

df_tmp <- full_join(df1, df_to_add2)
df_tmp <- df_tmp[complete.cases(df_tmp),]
df_tmp

  a          b
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
7 4  1.5952808
8 5  0.3295078
9 6 -0.8204684

这似乎不是正确的解决方案,是否有更好的方法顺序连接数据帧?

G.格洛腾迪克

首先加入_add *表。

library(dplyr)

result1 <- full_join(df_to_add1, df_to_add2) %>% full_join(df)
identical(result1, df_target)
## [1] TRUE

要不就:

result2 <- full_join(df_to_add1, df_to_add2)
identical(result2, df_target)
## [1] TRUE

要么

result3 <- df %>% right_join(df_to_add1) %>% full_join(df_to_add2)
identical(result3, df_target)
## [1] TRUE

注意

问题的输入没有中间文本,因此更容易复制和粘贴:

# inputs
set.seed(1)
a <- 1:6
b <- rnorm(length(a))
df <- data.frame(a = a)
df_to_add1 <- data.frame(a = a[1:3], b = b[1:3])
df_to_add2 <- data.frame(a = a[4:6], b = b[4:6])

# desired
df_target <- data.frame(a = a, b = b)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用dplyr连接两个数据帧时可以替换NA吗?

使用dplyr合并来自两个数据帧的信息

使用left_join()连接两个数据帧

如何使用 dplyr 根据来自两个数据帧的条件改变列

如何在R中使用ggplot将两个数据帧的点彼此连接?

如何在R中使用inner_join,dplyr将应按2列匹配的两个数据帧连接在一起?

dplyr可以使用by =中的正则表达式连接两个数据帧吗?

如何使用 Pandas Python 合并两个数据帧

使用两个字段作为键的外部连接两个数据帧

如何使用dplyr * _join()函数的两个“ by”参数在R中组合两个数据集?

如何合并两个数据帧?

如何合并两个数据帧?

如何使用具有多个条件的 dplyr 交叉检查 R 中的两个数据帧?

从一个数据帧中取出列,并使用“isin()”函数根据两个数据帧之间类似的“日期时间”将它们与另一个数据帧连接起来

如何从两个数据帧返回更大的数据帧

如何在两个数据帧之间重新排列匹配顺序

如何使用两个主数据帧和Purrr的Pmap和Dplyr的Semi_Join过滤几个数据帧

合并两个数据帧以按顺序获取每个数据帧的备用行

如何使用其他两个数据帧中的信息构建数据帧

使用%in%运算符对两个数据帧进行dplyr过滤

使用dplyr在两个数据帧中匹配时间戳

使用dplyr和stringdist通过stringmatch合并两个数据帧

Pandas 连接并合并两个数据帧

两个数据帧 R 的连接信息

根据行数连接两个数据帧

在大号上连接两个数据帧。列数

合并/连接/加入两个数据帧

问:如何在 py-polars 中附加或连接两个数据帧?

如何连接两个数据帧中的列和求和值?