程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了R通过具有多年观察的变量连接表大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决R通过具有多年观察的变量连接表?

开发过程中遇到R通过具有多年观察的变量连接表的问题如何解决?下面主要结合日常开发的经验,给出你关于R通过具有多年观察的变量连接表的解决方法建议,希望对你解决R通过具有多年观察的变量连接表有所启发或帮助;

我有多个表都具有相同的变量名称,我想通过 ID 连接这些表,但每个表都代表另一个年份。如果我使用inner.join,它会正确地只在每个表中保留这些ID,但它会为观察创建新的变量(即X变成X.x和X.y在同一行)。我可以使用 rbind,但是当我只想要那些出现在每个表中的数据时,它会保留所有数据。

library(dplyr)
df1 <- data.frame(x1 = 1:3,x2 = c(12,14,11),year = 2020)
df2 <- data.frame(x1 = 2:4,x2 = c(15,17,13),year = 2021)
dfall <- inner_join(df1,df2,by="x1")

结果:

 x1 x2.x year.x x2.y year.y
  2   14   2020   15   2021
  3   11   2020   17   2021

但我想要这个:

 x1   x2   year
  2   14   2020   
  2   15   2021
  3   11   2020
  3   17   2021

是否有可以执行此操作的连接?

解决方法

dplyr::bind_rows 然后 filter 会起作用:

bind_rows(df1,df2) %>% 
  filter(x1 %in% intersect(df1$x1,df2$x1))

如果需要,您可以将输出通过管道传输到 arrange(x1) 以对输出进行排序。

输出

  x1 x2 year
1  2 14 2020
2  3 11 2020
3  2 15 2021
4  3 17 2021
,
library(tidyr) # pivot_longer
inner_join(df1,df2,by="x1") %>%
  pivot_longer(-x1,names_pattern="(.*)\\.(.*)",names_to=c(".value","val")) %>%
  SELEct(-val)
# # A tibble: 4 x 3
#      x1    x2  year
#   <int> <dbl> <dbl>
# 1     2    14  2020
# 2     2    15  2021
# 3     3    11  2020
# 4     3    17  2021
,

试试这个。到目前为止,这是您两种方法的内在连接。

dfall <- inner_join(rbind(df1,df2),inner_join(df1,by="x1") %>% SELEct(x1))

这是另一种选择。它创建一个列 n,它等于每个 x1 出现的次数,然后只过滤那些出现次数与 year 的不同值一样多的列。如果您想要出现在超过一年/表中的任何记录,而不是出现在每一年/表中的记录,您可以将 n==length(unique(year)) 更改为 n>=2。这个很好,因为它很容易扩展到大量输入表。

dfall <- rbind(df1,df2) %>% 
  add_count(x1) %>% 
  filter(n==length(unique(year))) %>% 
  SELEct(-n)

大佬总结

以上是大佬教程为你收集整理的R通过具有多年观察的变量连接表全部内容,希望文章能够帮你解决R通过具有多年观察的变量连接表所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。