如何在阶乘数据框中生成一系列值?

时间:2019-06-13 14:39:38

标签: r dataframe

我正在尝试从最小和最大值的序列中获取两个因子(生成和处理)和x值的组合的3列数据帧。为什么我得到6列表呢?

我有一个数据帧,其中观察到了gen和Treat每种组合的最大值和最小值。创建一个空的数据框以填充循环。从最小值和最大值获得100的序列。然后尝试将所有内容粘贴并存储回空数据框中。

这是我的可复制示例”

gen <- c("gen1", "gen2" , "gen3")
trt <- c("treat1", "treat2")
t1 <- expand.grid(gen, trt)
max.vals <- c(0.005570975, 0.006843775, 0.006046788, 0.005808882, 0.005091197, 0.007763680)
min.vals <- c(-0.002843542 -0.002425798 -0.002187437 -0.002872362 -0.004089794 -0.003156588)
t2 <- data.frame(t1, min.vals, max.vals)
colnames(t2) <- c("gen", "trt", "min.vals", "max.vals")


x.values <- as.data.frame(matrix(nrow = 600, ncol = 3)) #empty dataframe
for (i in 1:6) {
        x.vals <- seq(t2$min.vals[i], t2$max.vals[i], length.out = 100) 
        gen.tret <- paste(t2$gen[i], t2$trt[i], x.vals)
        x.values[i] <- gen.tret
        }

我希望有3列(序列中的gen,rep和x.vals),但是我有6列数据帧。

1 个答案:

答案 0 :(得分:1)

这里是tidyverse的一个选项。按“ gen”分组的“ trt”获得“ min.vals”,“ max.vals”的每个元素之间的complete序列

library(tidyverse)
t2 %>% 
   group_by(gen, trt) %>%
   complete(min.vals =  seq(min.vals, max.vals, length.out = 100)) %>%
   select(gen, trt, x.vals = min.vals)

或与map2

t2 %>%
  transmute(gen, trt, x.vals = map2(min.vals, max.vals, seq, length.out = 100)) %>%
  unnest