在R中,我有两个数据框,我需要使用第二个df重新整形第一个顺序。
使用实际数据
工作表'Plan2'
https://docs.google.com/spreadsheets/d/1jkxik-QWz0kQYskQQXgaP0TXT7TsBLjp5RHSqtEw0pU/edit?usp=sharing
if(!require("FrF2")) install.packages("FrF2") ; library(FrF2)
df <- EXPERIMENTO_SALA <- read_excel("mypath/EXPERIMENTO SALA.xlsx",
col_types = c("numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric"))
view(df)
print.data.frame(df)
另一个数据框是:
plan.person = FrF2(nfactors = 5,
resolution = 5,
replications = 2,
randomize = FALSE,
factor.names = list(
pH = c(3, 9),
Temp = c(5, 30),
Dose = c(0.05, 0.5),
Conc = c(50, 350),
Speed = c(100, 200)
))
view(plan.person)
请注意,数据框架类似。这是因为我正在复制一项研究,以实践R软件进行实验分析。最大的区别是em'df'我对这个实验有三个响应,并且组织的行也有差异。
我需要重塑数据框'df'以使其等于数据框'plan.person',但我需要三帧数据'plan.person'(plan.person1,plan.person2, plan.person3),一个用于分析中的每个响应(SMO删除百分比,CO去除百分比,Bright-Edge 80删除百分比),这些数据位于数据框“df”中。
请问,我该怎么做?
**我使用一个较小的例子来展示一个使用玩具数据的更一般的例子。
if(!require("FrF2")) install.packages("FrF2") ; library(FrF2)
if(!require("truncnorm")) install.packages("truncnorm") ; library(truncnorm)
plan.person = FrF2(nfactors = 3,
resolution = 3,
replications = 2,
randomize = FALSE,
factor.names = list(
Temp = c(5, 30),
Conc = c(50, 350),
Speed = c(100, 200)
))
Temperatura <- c(5, 5, 30, 30, 5, 5, 30, 30)
Concentracao <- c(350, 50, 350, 50, 350, 50, 350, 50)
Velocidade <- c(100, 200, 200, 100, 100, 200, 200, 100)
remov_SMO <- rtruncnorm(n=8, a=0, mean=61.16, sd=31.32)
remov_CO <- rtruncnorm(n=8, a=0, mean=79, sd=24.17)
remov_BE <- rtruncnorm(n=8, a=0, mean=71.43, sd=29.61)
df <- data.frame(Temperatura, Concentracao, Velocidade, remov_SMO,
remov_CO, remov_BE)
view(df)
view(plan.person)
在这个较小的例子中,我需要根据Temperatura(= Temp),Concentracao(= Conc)和Velocidade以与数据帧'plan.person'相同的方式对数据帧'df'的行进行排序(=速度)信息,组织实验响应,以便您可以继续使用FrF2包。
答案 0 :(得分:1)
由于订单是重要的,并且您有重复的组合,我认为订购两个数据框,绑定它们然后返回原始订单更容易:
df <- data.frame(Temperatura,
Concentracao,
Velocidade,
remov_SMO, remov_CO, remov_BE)
reorder_ids <- do.call(order, as.list(plan.person))
plan_ordered <- plan.person[reorder_ids,]
df_ordered <- df[do.call(order, as.list(df[, 1:3])),]
new_plan <- data.frame(plan_ordered, df_ordered[, -(1:3)])
new_plan <- new_plan[reorder_ids,] # restore original order
attributes(new_plan) <- attributes(plan.person)
我认为new_plan
应该有你想要的,但你可能需要调整列名。
plan.person
有FrF2
添加了相当多的额外内容,
和其他功能可能取决于它们。