【问题标题】:basic matrix/data.frame arithmetic in RR中的基本矩阵/数据帧算术
【发布时间】:2015-01-28 16:53:59
【问题描述】:

我发现我无法在 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

【问题讨论】:

  • 我认为错误信息很清楚,不是吗?

标签: r matrix dataframe arithmetic-expressions


【解决方案1】:

问题与您的索引方式有关。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2019-11-06
    • 2019-02-01
    相关资源
    最近更新 更多