如何在r

时间:2016-03-23 09:21:27

标签: r dataframe

我有df1df2以下的两个数据框。我想根据df2中列出的方案创建三个数据框。例如,基于df3的scenario1的df2add 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

2 个答案:

答案 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