根据输入值创建数据框

时间:2017-05-22 21:28:10

标签: r

我是R的新手。我们将非常感谢您的帮助。

我有输入,例如。

  columnA <- 14  # USERINPUT
  columnB <- 1 # Incremented from 1.2.3.etc
  columnC <- columnA * columnB 
  columnD <- 25 # remains constant
  columnE <- columnC / columnD
  columnF <- 8 # remains constant
  columnG <- columnE + columnF
  mydf <- data.frame(columnA,columnB,columnC,columnD,columnE,columnF,columnG)

基于上述数据帧,我需要创建一个数据帧,使得在columnB的每个后续行值从1增加到2到3,这样columnG的值永远不会超过600,我们就会停止创建行。我试图在excel中做到这一点.Below是我需要的输出。

+---------+--------+---------+---------+---------+---------+---------+
| columnA | columB | columnC | columnD | columnE | columnF | columnG |
+---------+--------+---------+---------+---------+---------+---------+
|      14 |      1 |      14 |      25 | 0.56    |       8 | 8.56    |
|      14 |      2 |      28 |      25 | 1.12    |       8 | 9.12    |
|      14 |      3 |      42 |      25 | 1.68    |       8 | 9.68    |
|      14 |      4 |      56 |      25 | 2.24    |       8 | 10.24   |
|      14 |      5 |      70 |      25 | 2.8     |       8 | 10.8    |
|      14 |      6 |      84 |      25 | 3.36    |       8 | 11.36   |
|      14 |      7 |      98 |      25 | 3.92    |       8 | 11.92   |
|      14 |      8 |     112 |      25 | 4.48    |       8 | 12.48   |
+---------+--------+---------+---------+---------+---------+---------+

最终结果应该是数据框

1 个答案:

答案 0 :(得分:0)

首先,您可以计算data.frame的长度:

userinput <- 14
N <- (600 - 8) * 25 / userinput

然后,使用dplyr创建data.frame

mydf <- data_frame(ColA = 14, ColB = 1:floor(N), ColD = 25, ColF = 8) %>%
            mutate(ColC = ColA * ColB, ColE = ColC/ColD, ColG = ColE + ColF)

如果您需要按正确顺序排列的列:

> mydf <- mydf %>% select(ColA, ColB, ColC, ColD, ColE, ColF, ColG)

> mydf
      ColA ColB ColD ColF  ColC   ColE   ColG
   1:   14    1   25    8    14   0.56   8.56
   2:   14    2   25    8    28   1.12   9.12
   3:   14    3   25    8    42   1.68   9.68
   4:   14    4   25    8    56   2.24  10.24
   5:   14    5   25    8    70   2.80  10.80
  ---                                        
1053:   14 1053   25    8 14742 589.68 597.68
1054:   14 1054   25    8 14756 590.24 598.24
1055:   14 1055   25    8 14770 590.80 598.80
1056:   14 1056   25    8 14784 591.36 599.36
1057:   14 1057   25    8 14798 591.92 599.92