【发布时间】:2018-05-20 18:11:49
【问题描述】:
我有两个包含 220 个 obs 和 80 个变量的数据框。第一个数据帧df1 仅包含数据点1、2 和3。第二个数据框df2 具有不同的由小数组成的数值,例如0.12、-0.03、0.01 等(旨在描述给定月份的市值加权股票收益)。 PS:原始数据集长度为80。
例如
df1 = data.frame(a = c(2, 2, 1), b = c(3, 2, 3), c = c(1, 1, 2), d = c(3, 3, 1))
a b c d
1 2 3 1 3
2 2 2 1 3
3 1 3 2 1
df2 = data.frame(a = c(0.1, 0.1, 0.2), b = c(0.3, 0.4, 0.6), c = c(0.2, 0.3, 0.5), d = c(0.1, 0.5, 0.6))
a b c d
1 0.1 0.3 0.2 0.1
2 0.1 0.4 0.3 0.5
3 0.2 0.6 0.5 0.6
如何对df2 的行求和,然后根据df1 中的值转换成一个包含 220 个 obs 和 3 个变量的矩阵。请注意,df1 和 df2 具有相同的列名,顺序相同。如何通过对df2 的行求和,基于来自df1 的指标变量创建第三个数据框df3?我想根据df1 中的值对df2 的行求和以创建df3:
df3 =
X1 X2 X3
1 0.2 0.1 0.4
2 0.3 0.5 0.5
3 0.8 0.5 0.6
我们先来看看(X1,1)。在df1 中的行1 只包含一个值为1 的数据点,即(c,1)。因此,我们将df2 的行1 相加得到0.2。现在查看(X1,3)(X1 列的最后一个值)。观察df1 中的行3 以找到两个值为1 的数据点。在df2 中,这两个值是0.2 (a,3) 和0.6 (d,3),并将这些值相加得到0.8。
下面是df3 的解释:
calculation = data.frame("1" = c("0+0+0.2+0", "0+0+0.3+0", "0.2+0+0+0.6"), "2" = c("0.1+0+0+0", "0.1+0.4+0+0", "0+0+0.5+0"), "3" = c("0+0.3+0+0.1", "0+0+0+0.5", "0+0.6+0+0"))
X1 X2 X3
1 0 + 0 + 0.2 + 0 0.1 + 0 + 0 + 0 0 + 0.3 + 0 + 0.1
2 0 + 0 + 0.3 + 0 0.1 + 0.4 + 0 + 0 0 + 0 + 0 + 0.5
3 0.2 + 0 + 0 + 0.6 0 + 0 + 0.5 + 0 0 + 0.6 + 0 + 0
基于股票的更实用的解释。假设df1 是一个描述买入、持有和卖出建议的矩阵。 df2 描述了市场加权股票收益。所有变量/列都是不同的库存。 df3 创建一个包含三个不同投资组合的矩阵。如果股票是“买入”,我想将其放入“买入”投资组合。如果股票是“持有”,我想把它放在一个“持有”的投资组合中,等等。这很容易在 Excel 中使用嵌套的IF,AND,OR 函数完成,但我不知道如何在 R 中做。
【问题讨论】:
标签: r if-statement dataframe sum rows