我有df1
和df2
以下的两个数据框。我想根据df2
中列出的方案创建三个数据框。例如,基于df3
的scenario1的df2
将add
10
改为cover
(a1,a2,a3)
df1
{1}}。
df1
No a1 a2 a3 b1 b2 b3
3 7 1 3 2 1 7
3 9 4 9 7 6 2
3 8 3 1 3 5 0
df2
Scenario Cover Action Number
1 a Add 10
2 a Subtract 7
3 b Multiply 2
df3
No Scenario1a1 Scenario1a2 Scenario1a3
3 17 11 13
3 19 14 19
3 18 13 11
df4
No Scenario2a1 Scenario2a2 Scenario2a3
3 0 -6 -4
3 2 -3 2
3 1 -4 -6
df5
No Scenario3b1 Scenario3b2 Scenario3b3
3 3 2 15
3 14 12 3
3 6 10 0
答案 0 :(得分:1)
以下函数将df2
中的一行作为第一个参数,将df1
作为第二个参数。
apply.line <- function(line, df)
{
operators <- list(Add=function(x,y) x+y,
Subtract=function(x,y) x-y,
Multiply=function(x,y) x*y)
ret <- operators[[line$Action]](df[grepl(line$Cover, names(df))], line$Number)
names(ret) <- eval(call("paste0", "Scenario", line$Scenario, names(ret)))
ret
}
用法:
df3 <- apply.line(df2[1,], df1)
df4 <- apply.line(df2[2,], df2)
df5 <- apply.line(df2[3,], df3)
答案 1 :(得分:0)
手动,您可以执行以下操作:(我只是使用了另一个示例)
df1<-array(c(1:21), dim=c(3,7))
df3<-df1+10
df4<-df1-7
df5<-df1*2