假设我有三个变量:
var1<-c(101,102,103,104)
var2<-c(201,202)
var3<-c(301,302)
X<-expand.grid(var1,var2,var3)
上面的代码给出了这个输出
Var1 Var2 Var3
1 101 201 301
2 102 201 301
3 103 201 301
4 104 201 301
5 101 202 301
6 102 202 301
7 103 202 301
8 104 202 301
9 101 201 302
10 102 201 302
11 103 201 302
12 104 201 302
13 101 202 302
14 102 202 302
15 103 202 302
16 104 202 302
我需要的是下面的系列,其中对于 var1 中的每一行值,我们在 var2 和 var3 中都有相应的值。
Var1 Var2 Var3
1 101 201 301
2 101 202 302
3 102 201 301
4 102 202 302
5 103 201 301
6 103 202 302
7 104 201 301
8 104 202 302
expand.grid(var1 = var1, var2 = var2) |>
merge(data.frame(var2, var3))
# var2 var1 var3
# 1 201 101 301
# 2 201 102 301
# 3 201 103 301
# 4 201 104 301
# 5 202 101 302
# 6 202 102 302
# 7 202 103 302
# 8 202 104 302
您可以
dplyr::filter()
X
仅包含 Var2
和 Var3
的第三位数字相同的行。
library(tidyverse)
X |>
mutate(third_digit_same = (Var2 - 200) == (Var3 - 300)) |>
filter(third_digit_same) |>
select(-third_digit_same) |>
arrange(Var1)
#> Var1 Var2 Var3
#> 1 101 201 301
#> 2 101 202 302
#> 3 102 201 301
#> 4 102 202 302
#> 5 103 201 301
#> 6 103 202 302
#> 7 104 201 301
#> 8 104 202 302