R 从变量组合创建数据框

R 从变量组合创建数据框,r,dataframe,R,Dataframe,我试图在R中创建一个数据帧。我有两种方法和两种类型。我的增益是一个有5个值的向量。就像对于a_-gain_-train规则a和train_-gain类型一样,我有5个值 error_table = data.frame( Method = c("Rule A", "Rule A", "Rule B", "Rule B"), type = c("train_gain", "test

我试图在R中创建一个数据帧。我有两种方法和两种类型。我的增益是一个有5个值的向量。就像对于
a_-gain_-train
规则a和
train_-gain
类型一样,我有5个值

error_table = data.frame(
  Method = c("Rule A", "Rule A", "Rule B", "Rule B"),
  type = c("train_gain", "test_gain", "train_gain", "test_gain"),
  gain = c(a_gain_train, a_gain_test, b_gain_train, b_gain_test)
)
我需要创建一个这样的数据帧

Methode   type            gain
Rule A    train_gain      1
Rule A    train_gain      1.2
Rule A    train_gain      1.5
Rule A    train_gain      1.7
Rule A    train_gain      2
Rule A    test_gain       1.4
Rule A    test_gain       1.6
Rule A    test_gain       1.8
Rule A    test_gain       1.4
Rule A    test_gain       2.4
Rule B    train_gain      1
Rule B    train_gain      1.2
Rule B    train_gain      1.5
Rule B    train_gain      1.7
Rule B    train_gain      2
Rule B    test_gain       1.4
Rule B    test_gain       1.6
Rule B    test_gain       1.8
Rule B    test_gain       1.4
Rule B    test_gain       2.4

我们可以使用
交叉

library(tidyr)
library(dplyr)
crossing(Methode = c('Rule A', 'Rule B'), type = c('train_gain', 'test_gain')) %>% 
    mutate(gain = rep(list(gain_train, gain_test), 2)) %>% 
   unnest(c(gain))

或者使用
expand.grid
from
base R

transform(expand.grid(Methode = c('Rule A', 'Rule B'), 
  gain =  c(gain_train, gain_test)),
      type = rep(c('train_gain', 'test_gain'), each = 5))
在哪里


gain\u train我们可以使用
crossing

library(tidyr)
library(dplyr)
crossing(Methode = c('Rule A', 'Rule B'), type = c('train_gain', 'test_gain')) %>% 
    mutate(gain = rep(list(gain_train, gain_test), 2)) %>% 
   unnest(c(gain))

或者使用
expand.grid
from
base R

transform(expand.grid(Methode = c('Rule A', 'Rule B'), 
  gain =  c(gain_train, gain_test)),
      type = rep(c('train_gain', 'test_gain'), each = 5))
在哪里


gain\u train您可以使用
rep
重复这些值,并指定使用
每个值重复这些值的次数

error_table <- data.frame(
        Method = rep(c("Rule A", "Rule B"), each = 10),
     type = rep(c("train_gain","test_gain","train_gain","test_gain"), each = 5),
      gain=c(a_gain_train,a_gain_test,b_gain_train,b_gain_test))

error\u table您可以使用
rep
重复这些值,并指定使用
每个值重复这些值的次数

error_table <- data.frame(
        Method = rep(c("Rule A", "Rule B"), each = 10),
     type = rep(c("train_gain","test_gain","train_gain","test_gain"), each = 5),
      gain=c(a_gain_train,a_gain_test,b_gain_train,b_gain_test))

error\u table由于您已经将4个列表保存为单独的变量,请使用简单的
rbind

rbind(data.frame(Method="RULE A", type="train_gain",gain=a_gain_train),
      data.frame(Method="RULE A", type="test_gain",gain=a_gain_test),
      data.frame(Method="RULE B", type="train_gain",gain=b_gain_train),
      data.frame(Method="RULE B", type="test_gain",gain=b_gain_test))
输出

  Method       type  gain
1  RULE A train_gain    1
2  RULE A train_gain    2
3  RULE A train_gain    3
4  RULE A train_gain    4
5  RULE A train_gain    5
6  RULE A  test_gain    2
7  RULE A  test_gain    3
8  RULE A  test_gain    4
9  RULE A  test_gain    5
10 RULE A  test_gain    6
11 RULE B train_gain   10
12 RULE B train_gain   11
13 RULE B train_gain   12
14 RULE B train_gain   13
15 RULE B train_gain   14
16 RULE B  test_gain   19
17 RULE B  test_gain   20
18 RULE B  test_gain   21
19 RULE B  test_gain   22
20 RULE B  test_gain   23

注意:
gain
列中的值只是用于说明的假设数字

因为您已经将4个列表保存为单独的变量,请使用简单的
rbind

rbind(data.frame(Method="RULE A", type="train_gain",gain=a_gain_train),
      data.frame(Method="RULE A", type="test_gain",gain=a_gain_test),
      data.frame(Method="RULE B", type="train_gain",gain=b_gain_train),
      data.frame(Method="RULE B", type="test_gain",gain=b_gain_test))
输出

  Method       type  gain
1  RULE A train_gain    1
2  RULE A train_gain    2
3  RULE A train_gain    3
4  RULE A train_gain    4
5  RULE A train_gain    5
6  RULE A  test_gain    2
7  RULE A  test_gain    3
8  RULE A  test_gain    4
9  RULE A  test_gain    5
10 RULE A  test_gain    6
11 RULE B train_gain   10
12 RULE B train_gain   11
13 RULE B train_gain   12
14 RULE B train_gain   13
15 RULE B train_gain   14
16 RULE B  test_gain   19
17 RULE B  test_gain   20
18 RULE B  test_gain   21
19 RULE B  test_gain   22
20 RULE B  test_gain   23

注:
增益
列中的值仅为假设数字,用于说明

给定的四个增益向量。然后,您可以尝试构造一个嵌套列表,并取消它两次

library(tidyr)

list("Rule A" = list("train_gain" = a_gain_train, "test_gain" = a_gain_test),
     "Rule B" = list("train_gain" = b_gain_train, "test_gain" = b_gain_test)) %>%
  tibble::enframe() %>%
  unnest_longer(value, values_to = "gain", indices_to = "type") %>%
  unnest(gain)

# # A tibble: 20 x 3
#    name    gain type      
#    <chr>  <dbl> <chr>     
#  1 Rule A   1   train_gain
#  2 Rule A   1.2 train_gain
#  3 Rule A   1.5 train_gain
#  4 Rule A   1.7 train_gain
#  5 Rule A   2   train_gain
#  6 Rule A   1.4 test_gain 
#  7 Rule A   1.6 test_gain 
#  8 Rule A   1.8 test_gain 
#  9 Rule A   1.4 test_gain 
# 10 Rule A   2.4 test_gain 
# 11 Rule B   1   train_gain
# 12 Rule B   1.2 train_gain
# 13 Rule B   1.5 train_gain
# 14 Rule B   1.7 train_gain
# 15 Rule B   2   train_gain
# 16 Rule B   1.4 test_gain 
# 17 Rule B   1.6 test_gain 
# 18 Rule B   1.8 test_gain 
# 19 Rule B   1.4 test_gain 
# 20 Rule B   2.4 test_gain 
library(tidyr)
列表(“规则A”=列表(“训练增益”=训练增益,“测试增益”=测试增益”),
“规则B”=列表(“训练增益”=训练增益,“测试增益”=训练增益”)%>%
tibble::enframe()%>%
unnest_longer(值,值至“增益”,索引至“类型”)%>%
不耐烦(增益)
##tibble:20 x 3
#名称增益类型
#            
#1规则A 1列车增益
#2规则A 1.2列车增益
#3规则A 1.5列车增益
#4规则A 1.7列车增益
#5规则A 2列车增益
#6规则A 1.4测试增益
#7规则A 1.6测试增益
#8规则A 1.8测试增益
#9规则A 1.4测试增益
#10规则A 2.4测试增益
#11规则B 1列车增益
#12规则B 1.2列车增益
#13规则B 1.5列车增益
#14规则B 1.7列车增益
#15规则B 2列车增益
#16规则B 1.4测试增益
#17规则B 1.6测试增益
#18规则B 1.8测试增益
#19规则B 1.4测试增益
#20规则B 2.4测试增益

数据


给定四个增益向量,一个增益序列。然后,您可以尝试构造一个嵌套列表,并取消它两次

library(tidyr)

list("Rule A" = list("train_gain" = a_gain_train, "test_gain" = a_gain_test),
     "Rule B" = list("train_gain" = b_gain_train, "test_gain" = b_gain_test)) %>%
  tibble::enframe() %>%
  unnest_longer(value, values_to = "gain", indices_to = "type") %>%
  unnest(gain)

# # A tibble: 20 x 3
#    name    gain type      
#    <chr>  <dbl> <chr>     
#  1 Rule A   1   train_gain
#  2 Rule A   1.2 train_gain
#  3 Rule A   1.5 train_gain
#  4 Rule A   1.7 train_gain
#  5 Rule A   2   train_gain
#  6 Rule A   1.4 test_gain 
#  7 Rule A   1.6 test_gain 
#  8 Rule A   1.8 test_gain 
#  9 Rule A   1.4 test_gain 
# 10 Rule A   2.4 test_gain 
# 11 Rule B   1   train_gain
# 12 Rule B   1.2 train_gain
# 13 Rule B   1.5 train_gain
# 14 Rule B   1.7 train_gain
# 15 Rule B   2   train_gain
# 16 Rule B   1.4 test_gain 
# 17 Rule B   1.6 test_gain 
# 18 Rule B   1.8 test_gain 
# 19 Rule B   1.4 test_gain 
# 20 Rule B   2.4 test_gain 
library(tidyr)
列表(“规则A”=列表(“训练增益”=训练增益,“测试增益”=测试增益”),
“规则B”=列表(“训练增益”=训练增益,“测试增益”=训练增益”)%>%
tibble::enframe()%>%
unnest_longer(值,值至“增益”,索引至“类型”)%>%
不耐烦(增益)
##tibble:20 x 3
#名称增益类型
#            
#1规则A 1列车增益
#2规则A 1.2列车增益
#3规则A 1.5列车增益
#4规则A 1.7列车增益
#5规则A 2列车增益
#6规则A 1.4测试增益
#7规则A 1.6测试增益
#8规则A 1.8测试增益
#9规则A 1.4测试增益
#10规则A 2.4测试增益
#11规则B 1列车增益
#12规则B 1.2列车增益
#13规则B 1.5列车增益
#14规则B 1.7列车增益
#15规则B 2列车增益
#16规则B 1.4测试增益
#17规则B 1.6测试增益
#18规则B 1.8测试增益
#19规则B 1.4测试增益
#20规则B 2.4测试增益

数据


a\u gain\u train这不符合预期。它给出的结果类似于规则A Train Gain xx Rule A Test Gain xx Rule B Train Gain xx Rule B Test Gain xx和这样的循环。@kbs您只需使用
Gain Train
Gain Test
@kbs
Gain
中的值似乎被复制。你能检查一下吗?这不符合预期。它给出的结果类似于规则A Train Gain xx Rule A Test Gain xx Rule B Train Gain xx Rule B Test Gain xx和这样的循环。@kbs您只需使用
Gain Train
Gain Test
@kbs
Gain
中的值似乎被复制。你能检查一下吗