我有三个不同的数据帧 关键/相同变量是索引。 其他列包含1或0(如果该值不存在)
dfq <- structure(list(index = c("S14", "S65", "S32", "S13", "S15", "S17", "S2", "S21", "S46", "S5", "S56", "S57", "S6", "S63", "S64", "S68", "S72", "S78", "S1", "S10", "S11", "S12", "S16", "S18", "S19", "S20", "S22", "S23", "S24", "S25", "S26", "S27", "S28", "S29", "S3", "S30", "S31", "S33", "S34", "S35", "S36", "S37", "S38", "S39", "S4", "S40", "S41", "S42", "S43", "S44", "S45", "S47", "S48", "S49", "S50", "S51", "S52", "S53", "S54", "S55", "S58", "S59", "S60", "S61", "S62", "S66", "S67", "S69", "S7", "S70", "S71", "S73", "S74", "S75", "S76", "S77", "S79", "S8", "S80", "S81", "S82", "S83", "S84", "S85", "S9"), D1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L), D2 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), D3 = c(0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L ), D4 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), D5 = c(1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), D6 = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -85L))
dfe <- structure(list(index = c("S1", "S10", "S11", "S12", "S13", "S14", "S15", "S16", "S17", "S18", "S19", "S2", "S20", "S21", "S22", "S23", "S24", "S25", "S26", "S27", "S28", "S29", "S3", "S30", "S31", "S32", "S33", "S34", "S35", "S36", "S37", "S38", "S39", "S4", "S40", "S41", "S42", "S43", "S44", "S45", "S46", "S47", "S48", "S49", "S5", "S50", "S51", "S52", "S53", "S54", "S55", "S56", "S57", "S58", "S59", "S6", "S60", "S61", "S62", "S63", "S64", "S65", "S66", "S67", "S68", "S69", "S7", "S70", "S71", "S72", "S73", "S74", "S75", "S76", "S77", "S78", "S79", "S8", "S80", "S81", "S82", "S83", "S84", "S85", "S9"), E1 = c(1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L), E2 = c(1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L), E3 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), E4 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -85L))
dfy <- structure(list(index = c("S1", "S10", "S11", "S12", "S13", "S14", "S15", "S16", "S17", "S18", "S19", "S2", "S20", "S21", "S22", "S23", "S24", "S25", "S26", "S27", "S28", "S29", "S3", "S30", "S31", "S32", "S33", "S34", "S35", "S36", "S37", "S38", "S4", "S40", "S41", "S42", "S43", "S44", "S45", "S46", "S47", "S48", "S49", "S5", "S50", "S51", "S52", "S53", "S54", "S55", "S56", "S57", "S58", "S59", "S6", "S60", "S61", "S62", "S63", "S64", "S65", "S66", "S67", "S68", "S69", "S7", "S70", "S71", "S72", "S73", "S74", "S75", "S76", "S77", "S78", "S79", "S8", "S80", "S81", "S82", "S83", "S84", "S85", "S9", "S39"), year = c(2017L, 2018L, 2017L, 2018L, 2017L, 2014L, 2015L, 2017L, 2015L, 2017L, 2018L, 2015L, 2014L, 2016L, 2015L, 2013L, 2012L, 2018L, 2018L, 2016L, 2017L, 2012L, 2018L, 2015L, 2018L, 2018L, 2018L, 2018L, 2017L, 2009L, 2017L, 2016L, 2015L, 2014L, 2012L, 2018L, 2016L, 2017L, 2013L, 2018L, 2019L, 2008L, 2018L, 2017L, 2018L, 2016L, 2017L, 2017L, 2018L, 2017L, 2017L, 2016L, 2018L, 2019L, 2014L, 2019L, 2018L, 2016L, 2017L, 2017L, 2018L, 2016L, 2016L, 2016L, 2017L, 2013L, 2013L, 2016L, 2014L, 2018L, 2012L, 2014L, 2013L, 2018L, 2017L, 2018L, 2018L, 2018L, 2015L, 2018L, 2018L, 2016L, 2017L, 2017L, 2017L)), class = "data.frame", row.names = c(NA, -85L))
现在可以检测是否存在dfe + dfq的组合: 小例子:
combination, year, frq D1 + E1, 2018, 2 D1 + E1, 2018, 0
例如编辑:
使用关键列将所有数据框合并为一个:
dfa <- merge(dfq, dfe, id="index")
dfa2 <- merge(dfa, dfy, id="index")
我所说的2019年的例子 步骤1:
index, combination, year
S47, D6 + E2, 2019
S59, D3 + E1, 2019
S59, D3 + E2, 2019
S59, D3 + E4, 2019
S60, D6 + E2, 2019
最终输出:
combination, year, frq
D6 + E2, 2019, 2
D3 + E1, 2019, 1
D3 + E2, 2019, 1
D3 + E4, 2019, 1
如何才能产生与过去几年一样的最终结果
答案 0 :(得分:0)
我不确定这是否是您要寻找的东西,但请放一些东西。使用dplyr,我获取了数据帧并将其变长,并进行了过滤,因此仅保留了带有“ 1”的变量。然后设置所有D1-6和E1-4变量的成对组合,并进行过滤,以使其余行的D中有一个变量,E中有一个变量。最后,计算唯一年份和D + E组合的频率。我相信有更好的方法可以做到这一点,但希望对您有所帮助。
library(dplyr)
dfa3 <- dfa2 %>%
gather(combination, value, -c(index, year)) %>%
filter(value==1)
dfa3 <- dfa3 %>%
group_by(index, year) %>%
do({
setNames(
data.frame(t(combn(.$combination, 2)), stringsAsFactors = F),
c('c1', 'c2')
)
})
dfa3 <- dfa3 %>%
filter(c1 %in% names(dfq) & c2 %in% names(dfe)) %>%
group_by(year, c1, c2) %>%
mutate(frq = n(),
combination = paste(c1, c2, sep=' + ')) %>%
slice(1) %>%
arrange(desc(year), index) %>%
ungroup() %>%
select(-c(index, c1, c2))
R> dfa3
# A tibble: 57 x 3
year frq combination
<int> <int> <chr>
1 2019 2 D6 + E2
2 2019 1 D3 + E1
3 2019 1 D3 + E2
4 2019 1 D3 + E4
5 2018 8 D3 + E2
6 2018 1 D3 + E1
7 2018 5 D3 + E4
8 2018 2 D6 + E4
9 2018 3 D4 + E2
10 2018 5 D6 + E2
# … with 47 more rows