Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于向量创建列_R_Vector - Fatal编程技术网

R 如何基于向量创建列

R 如何基于向量创建列,r,vector,R,Vector,我需要根据我创建的两个向量创建一列。这个新专栏需要遵循一些规则 假设我有两个向量: vct_A <- c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF") vct_B <- c("P1", "P2", "P3") 我真的需要帮助。谢谢如果在选择值时没有涉及逻辑,那么我们必须手动构建数据帧。单向使用expand.grid df <- rbind(expand.grid(c("AAA", "BBB"), c("P1", "P2",

我需要根据我创建的两个向量创建一列。这个新专栏需要遵循一些规则

假设我有两个向量:

    vct_A <- c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF")
    vct_B <- c("P1", "P2", "P3")

我真的需要帮助。谢谢

如果在选择值时没有涉及逻辑,那么我们必须手动构建数据帧。单向使用
expand.grid

df <- rbind(expand.grid(c("AAA", "BBB"), c("P1", "P2", "P3")),
            expand.grid("CCC", c("P1", "P2")),
            expand.grid("DDD", c("P2", "P3")),
            expand.grid(c("EEE", "FFF"), "P3"))
df

#   Var1 Var2
#1   AAA   P1
#2   BBB   P1
#3   AAA   P2
#4   BBB   P2
#5   AAA   P3
#6   BBB   P3
#7   CCC   P1
#8   CCC   P2
#9   DDD   P2
#10  DDD   P3
#11  EEE   P3
#12  FFF   P3

df我们可以使用
tidyverse
方法

library(tidyverse)
list(crossing(Var1 = c("AAA", "BBB"), Var2 = c("P1", "P2", "P3")), 
     crossing(Var1 = "CCC", Var2 = c("P1", "P2")), 
     crossing(Var1 = "DDD", Var2 = c("P2", "P3")), 
     crossing(Var1 = c("EEE", "FFF"), Var2 = "P3")) %>% 
  bind_rows
# A tibble: 12 x 2
#   Var1  Var2 
#   <chr> <chr>
# 1 AAA   P1   
# 2 AAA   P2   
# 3 AAA   P3   
# 4 BBB   P1   
# 5 BBB   P2   
# 6 BBB   P3   
# 7 CCC   P1   
# 8 CCC   P2   
# 9 DDD   P2   
#10 DDD   P3   
#11 EEE   P3   
#12 FFF   P3   

你能解释一下这些规则背后的逻辑吗?@TimBiegeleisen它实际上是基于一个公司的产品。我很感激你的提问,但这些是基本规则。你能分享一个预期输出的例子吗。
library(tidyverse)
list(crossing(Var1 = c("AAA", "BBB"), Var2 = c("P1", "P2", "P3")), 
     crossing(Var1 = "CCC", Var2 = c("P1", "P2")), 
     crossing(Var1 = "DDD", Var2 = c("P2", "P3")), 
     crossing(Var1 = c("EEE", "FFF"), Var2 = "P3")) %>% 
  bind_rows
# A tibble: 12 x 2
#   Var1  Var2 
#   <chr> <chr>
# 1 AAA   P1   
# 2 AAA   P2   
# 3 AAA   P3   
# 4 BBB   P1   
# 5 BBB   P2   
# 6 BBB   P3   
# 7 CCC   P1   
# 8 CCC   P2   
# 9 DDD   P2   
#10 DDD   P3   
#11 EEE   P3   
#12 FFF   P3   
do.call(rbind, Map(expand.grid, split(vct_A, rep(1:4, c(2, 1, 1, 2))), 
          list(vct_B, vct_B[-3], vct_B[-1], vct_B[3])))