我创建了以下代码,该代码会生成组合列表

experiment <- expand.grid(
  flavor=c("chocolate", "vanilla", "strawberry"), 
  price=c("$1.50", "$2.00", "$2.50"), 
  container=c("cone", "cup"), 
  topping=c("yes", "no"))

# Dividir el conjunto de datos en grupos de 3 filas
grupos <- split(experiment, rep(1:ceiling(nrow(experiment)/3), each=3, 
                                length.out=nrow(experiment)))

# Crear escenarios para cada grupo
escenarios <- lapply(grupos, function(grupo) {
  # Mostrar los objetos de cada grupo
  for (i in 1:nrow(grupo)) {
    cat("Objeto", i, ":\n")
    print(grupo[i, ])
    cat("\n")
  }
})

获取以下对象列表

Objeto 1 :
     flavor price container topping
1 chocolate $1.50      cone     yes

Objeto 2 :
   flavor price container topping
2 vanilla $1.50      cone     yes

Objeto 3 :
      flavor price container topping
3 strawberry $1.50      cone     yes

Objeto 1 :
     flavor price container topping
4 chocolate $2.00      cone     yes

Objeto 2 :
   flavor price container topping
5 vanilla $2.00      cone     yes

Objeto 3 :
      flavor price container topping
6 strawberry $2.00      cone     yes

Objeto 1 :
     flavor price container topping
7 chocolate $2.50      cone     yes

Objeto 2 :
   flavor price container topping
8 vanilla $2.50      cone     yes

Objeto 3 :
      flavor price container topping
9 strawberry $2.50      cone     yes

Objeto 1 :
      flavor price container topping
10 chocolate $1.50       cup     yes

Objeto 2 :
    flavor price container topping
11 vanilla $1.50       cup     yes

Objeto 3 :
       flavor price container topping
12 strawberry $1.50       cup     yes

Objeto 1 :
      flavor price container topping
13 chocolate $2.00       cup     yes

Objeto 2 :
    flavor price container topping
14 vanilla $2.00       cup     yes

Objeto 3 :
       flavor price container topping
15 strawberry $2.00       cup     yes

Objeto 1 :
      flavor price container topping
16 chocolate $2.50       cup     yes

Objeto 2 :
    flavor price container topping
17 vanilla $2.50       cup     yes

Objeto 3 :
       flavor price container topping
18 strawberry $2.50       cup     yes

Objeto 1 :
      flavor price container topping
19 chocolate $1.50      cone      no

Objeto 2 :
    flavor price container topping
20 vanilla $1.50      cone      no

Objeto 3 :
       flavor price container topping
21 strawberry $1.50      cone      no

Objeto 1 :
      flavor price container topping
22 chocolate $2.00      cone      no

Objeto 2 :
    flavor price container topping
23 vanilla $2.00      cone      no

Objeto 3 :
       flavor price container topping
24 strawberry $2.00      cone      no

Objeto 1 :
      flavor price container topping
25 chocolate $2.50      cone      no

Objeto 2 :
    flavor price container topping
26 vanilla $2.50      cone      no

Objeto 3 :
       flavor price container topping
27 strawberry $2.50      cone      no

Objeto 1 :
      flavor price container topping
28 chocolate $1.50       cup      no

Objeto 2 :
    flavor price container topping
29 vanilla $1.50       cup      no

Objeto 3 :
       flavor price container topping
30 strawberry $1.50       cup      no

Objeto 1 :
      flavor price container topping
31 chocolate $2.00       cup      no

Objeto 2 :
    flavor price container topping
32 vanilla $2.00       cup      no

Objeto 3 :
       flavor price container topping
33 strawberry $2.00       cup      no

Objeto 1 :
      flavor price container topping
34 chocolate $2.50       cup      no

Objeto 2 :
    flavor price container topping
35 vanilla $2.50       cup      no

Objeto 3 :
       flavor price container topping
36 strawberry $2.50       cup      no

我想将其转换为数据帧.我try 过以下代码:

f <- as.data.frame(do.call(cbind, grupos))

得到不想要的结果

enter image description here

我想把它放在摇篮里的方式是

Object 1 Object 2 Object 3
chocolate $1.50
cone
yes
vanilla $1.50
cone
yes
strawberry $1.50
cone
yes
Second row

我try 了下面显示的代码

# Crear un dataframe para almacenar los escenarios reconfigurados
df_escenarios <- data.frame(matrix(ncol=3, nrow=length(escenarios)))
colnames(df_escenarios) <- c("Object 1", "Object 2", "Object 3")

# Llenar el dataframe con los escenarios
for (i in 1:length(escenarios)) {
  if (length(escenarios[[i]]) > 0) {  # Verificar que haya escenarios en el grupo
    df_escenarios[i, ] <- unlist(escenarios[[i]])
  } else {
    df_escenarios[i, ] <- NA  # Si no hay escenarios, llenar con NA
  }
}
# Imprimir el dataframe
print(df_escenarios)

但try 是空的

     Object 1 Object 2 Object 3
1        NA       NA       NA
2        NA       NA       NA
3        NA       NA       NA
4        NA       NA       NA
5        NA       NA       NA
6        NA       NA       NA
7        NA       NA       NA
8        NA       NA       NA
9        NA       NA       NA
10       NA       NA       NA
11       NA       NA       NA
12       NA       NA       NA 

提前感谢你的帮助

推荐答案

 do.call(paste, experiment) |>
   matrix(ncol = 3, byrow = TRUE, dimnames = list(NULL, paste0('Object',1:3))) |>
   data.frame()
                    Object1                Object2                   Object3
1  chocolate $1.50 cone yes vanilla $1.50 cone yes strawberry $1.50 cone yes
2  chocolate $2.00 cone yes vanilla $2.00 cone yes strawberry $2.00 cone yes
3  chocolate $2.50 cone yes vanilla $2.50 cone yes strawberry $2.50 cone yes
4   chocolate $1.50 cup yes  vanilla $1.50 cup yes  strawberry $1.50 cup yes
5   chocolate $2.00 cup yes  vanilla $2.00 cup yes  strawberry $2.00 cup yes
6   chocolate $2.50 cup yes  vanilla $2.50 cup yes  strawberry $2.50 cup yes
7   chocolate $1.50 cone no  vanilla $1.50 cone no  strawberry $1.50 cone no
8   chocolate $2.00 cone no  vanilla $2.00 cone no  strawberry $2.00 cone no
9   chocolate $2.50 cone no  vanilla $2.50 cone no  strawberry $2.50 cone no
10   chocolate $1.50 cup no   vanilla $1.50 cup no   strawberry $1.50 cup no
11   chocolate $2.00 cup no   vanilla $2.00 cup no   strawberry $2.00 cup no
12   chocolate $2.50 cup no   vanilla $2.50 cup no   strawberry $2.50 cup no

其他方法包括:

data.frame(t(sapply(grupos, do.call, what = paste)))

invoke_map_df(\(...)data.frame(t(paste(...))), grupos)

map_df(grupos, ~data.frame(t(exec(paste, !!!.))))

R相关问答推荐

R Lubridate:舍入/快照日期时间到一天中最近的任意时间?

如何 bootstrap glm回归、估计95%置信区间并绘制它?

如何计算前一行的值,直到达到标准?

任意列的欧几里得距离

R s iml包如何处理语法上无效的因子级别?'

Ggplot2中的重复注记

将饼图插入条形图

R—将各种CSV数字列转换为日期

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何从容器函数中提取conf并添加到ggplot2中?

条形图顶部与其错误条形图不对齐

如何在PDF格式的kableExtra表格中显示管道字符?

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

多元正态分布的计算

在散点图中使用geom_point放置线图例

为什么函数toTitleCase不能处理english(1),而toupper可以?

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

R没有按顺序显示我的有序系数?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何在分组蜂群小区中正确定位标签