大佬教程收集整理的这篇文章主要介绍了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,请注明来意。