r - 如何在阶乘数据框中创建一系列值?
问题描述
我正在尝试从一个跨越最小值和最大值的序列中获取一个 3 列数据框,以结合两个因素(生成和处理)和 x 值。为什么我要得到一个 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 列数据框。
解决方案
这是一个选项tidyverse
。按'gen'、'trt'分组得到complete
'min.vals'、'max.vals'的每个元素之间的序列
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
推荐阅读
- numpy - Cannot uninstall numpy 1.21.2, RECORD file not found
- node.js - NodeJs - How to test if a value exists in an array of objects?
- javascript - Bootstrap rotate whole Layout and make just on an scrolling breakpoint
- mdx - Mondrian MDX query: total aggregations
- doxygen - 如何更改 doxygen API 网页中显示的包含文件路径?
- git - 无限 git pull git 远程修剪循环 - 如何修复?
- node.js - Node.js 和 MongoDB 没有正确读取变量
- django - 涉及不查询几何本身的具有几何的表的查询是否比没有几何的表需要更长的查询时间?
- html - FullCalendar 标题显示 MM/YYYY 堆叠而不是并排显示
- python - RaspberryPi:TypeError:不支持的格式字符串传递给 NoneType.__format__ dht22 lcd 16x2