如何在r中创建for循环并填充输出矩阵

时间:2015-10-28 19:27:50

标签: r for-loop output

这是一个两部分问题。

我的数据集是2x6,名为Price。

我想创建一个for循环,它会将Price中的特定行乘以(1-h)和-1 *(1-h)。这个结果应该填充一个只有2x3的新矩阵。

Price的输入在第1-3行的第一列中具有值,在第4-6行的第二列中具有值。其他值只是零。

h <- .02

> Price
     V1   V2
1 15.24 0.00
2 15.24 0.00
3 15.24 0.00
4  0.00 8.76
5  0.00 8.76
6  0.00 8.76

新矩阵应如下所示:

> effective.price
     V1    V2
1 14.94 -8.58
2 15.24 -8.76
3 15.24 -8.76

我甚至不知道从哪里开始,我们将非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:0)

我认为这比你想象的容易。如果你真的有这样的固定输入,那么

price <- read.table(text = "15.24 0.00
                    15.24 0.00
                    15.24 0.00
                    0.00 8.76
                    0.00 8.76
                    0.00 8.76")
newPrice <- as.data.frame(cbind(price$V1[1:3],price$V2[4:6]))

您在列的设置部分使用列绑定。第一列采用V1 [1到3]等的值

产量

> newPrice
     V1   V2
1 15.24 8.76
2 15.24 8.76
3 15.24 8.76

如果您需要更改newPrice元素的值,您可以采用矢量方式对其进行操作:

newPrice$V1 <- newPrice$V1 * (1 - h)
newPrice$V2 <- newPrice$V2 * (h - 1)

产生

> newPrice
       V1      V2
1 14.9352 -8.5848
2 14.9352 -8.5848
3 14.9352 -8.5848

答案 1 :(得分:0)

我不确定h究竟是什么,但我认为这可以做你想要的。

df <- read.table(text = "V1   V2
1 15.24 0.00
2 15.24 0.00
3 15.24 0.00
4  0.00 8.76
5  0.00 8.76
6  0.00 8.76")
h <- 0.02
df$V1 <- df$V1 * (1 - h)
df$V2 <-  - df$V2 * (1 - h)
effective.price <- data.frame(lapply(df, function(x) x[x != 0]))

这给出了:

       V1      V2
1 14.9352 -8.5848
2 14.9352 -8.5848
3 14.9352 -8.5848

答案 2 :(得分:0)

你也可以通过重塑来实现这个目标:

library(dplyr)
library(tidyr)
df %>%
  mutate(V1 = V1 * (1-h),
         V2 = V2 * -(1-h),
         ID = n() %>% `/`(2) %>% seq %>% rep(2)) %>%
  gather(variable, value, -ID) %>%
  filter(value != 0) %>%
  spread(variable, value)