R中的基本矩阵/ data.frame算法

时间:2014-11-30 16:47:29

标签: r matrix dataframe arithmetic-expressions

我发现令人费解的是我无法在R中进行简单的矩阵运算。这真的不可能吗?我想获取1个数据帧中的值,并将它们加载到另一个数据帧中的所有列中。看起来这应该很容易,但我找不到任何东西,虽然有一个“心理”包作为一个功能,但没有给出预期的结果。也似乎没有必要。有小费吗。非常感谢。

> NROW(arData1[c(gsub(" ", ".",portfolio1), "benchmark")])
[1] 51
> NCOL(arData1[c(gsub(" ", ".",portfolio1), "benchmark")])
[1] 4
> NROW(arData1[gsub(" ", ".", treasuries)])
[1] 51
> NCOL(arData1[gsub(" ", ".", treasuries)])
[1] 1

ExRet1 <- arData1[c(gsub(" ", ".",portfolio1), "benchmark")] - arData1[gsub(" ", ".", treasuries)]
Error in Ops.data.frame(arData1[c(gsub(" ", ".", portfolio1), "benchmark")],  : 
  - only defined for equally-sized data frames

1 个答案:

答案 0 :(得分:5)

问题与索引的方式有关。

df["colname"]

将列colname 提取为数据框 。如果减去两个数据帧,则R按列和行进行,因此两个数据帧的列数必须相同。

但是,您可以使用colname[[提取为 向量 ,如

df[["colname"]]

如果从数据框中减去一个向量,则会从df中的每一列中减去该向量。

df <- data.frame(x=1:5,y=11:15,z=21:25,A=31:35)
df[c("x","y","z")] - df["A"]
# Error in Ops.data.frame(df[c("x", "y", "z")], df["A"]) : 
#   - only defined for equally-sized data frames

df[c("x","y","z")] - df[["A"]]
#     x   y   z
# 1 -30 -20 -10
# 2 -30 -20 -10
# 3 -30 -20 -10
# 4 -30 -20 -10
# 5 -30 -20 -10