使用三个不同长度变量的可能组合创建一个数据框

问题描述 投票:0回答:2

假设我有三个变量:

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
r dataframe join merge expand
2个回答
0
投票
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

0
投票

您可以

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
© www.soinside.com 2019 - 2024. All rights reserved.