在我的数据集num
num
structure(list(x1 = c(52L, 74L, 61L, 63L, 44L), x2 = c(32L, 96L,
83L, 35L, 95L), x3 = c(9L, 36L, 7L, 33L, 67L), x4 = c(1L, 2L,
3L, 2L, 3L), x5 = c(2017L, 2017L, 2017L, 2018L, 2018L)), .Names = c("x1",
"x2", "x3", "x4", "x5"), class = "data.frame", row.names = c(NA,
-5L))
有变量x4(数字)和x5(年)。 问题:2017年的x4变量值与2018年的x4变量值不匹配。 例如,在我可重复的示例中,我们可以看到2017年的变量x4具有数字1,但2018年没有数字1。 所以我们必须从数据集中删除数字1(即用它删除行)。 以及2017年存在的其他x4值,但不是2018年。 怎么样?
确实2017年有406个数字,但在2018年原始数据集中有1500个数字。需要2017年和2018年的数字相同的代码,但在406到1500之后,2018年有数字吗?
structure(list(x1 = c(52L, 74L, 61L, 63L, 44L, 44L), x2 = c(32L,
96L, 83L, 35L, 95L, 95L), x3 = c(9L, 36L, 7L, 33L, 67L, 67L),
x4 = c(1L, 2L, 3L, 2L, 3L, 1500L), x5 = c(2017L, 2017L, 2017L,
2018L, 2018L, 2018L)), .Names = c("x1", "x2", "x3", "x4",
"x5"), class = "data.frame", row.names = c(NA, -6L))
输出中的
x1 x2 x3 x4 x5
74 96 36 2 2017
61 83 7 3 2017
63 35 33 2 2018
44 95 67 3 2018
44 95 67 1500 2018
答案 0 :(得分:3)
您可以执行以下操作:
# Get x4 values present for all years
x4.all <- Reduce(
function(a, b) intersect(a, b),
lapply(split(num, num$x5), function(x) x$x4))
# Select entries where x4 is an element of x4.all
subset(num, x4 %in% x4.all)
#x1 x2 x3 x4 x5
#2 74 96 36 2 2017
#3 61 83 7 3 2017
#4 63 35 33 2 2018
#5 44 95 67 3 2018
说明:我们使用Reduce(function(a, b) intersect(a, b), ...)
计算所有id4
(年)组中x5
值的交叉点;然后,我们根据所有年份中存在的x4.all
值过滤条目。
答案 1 :(得分:1)
你可以,例如首先检索每年存在的数字,然后用它们索引。
Firebase Cloud Functions
答案 2 :(得分:1)
以下是tidyverse
library(dplyr)
nums %>%
group_by(x4) %>%
filter(n_distinct(x5) == n_distinct(.$x5))
# A tibble: 4 x 5
# Groups: x4 [2]
# x1 x2 x3 x4 x5
# <int> <int> <int> <int> <int>
#1 74 96 36 2 2017
#2 61 83 7 3 2017
#3 63 35 33 2 2018
#4 44 95 67 3 2018