首页 > 解决方案 > 过滤数据,逗号与非逗号

问题描述

我有以下代码

#abnormal return 
exp.ret <- lm((RET-rf)~mkt.rf+smb+hml, data=tesla[tesla$period=="estimation.period",])
tesla$abn.ret <- (tesla$RET-tesla$rf)-predict(exp.ret,tesla)

#CAR during event window
CAR <- sum(tesla$abn.ret[tesla$period=="event.period",])

第一部分运行良好,但第二部分出现此错误:

" tesla$abn.ret[tesla$period == "event.period", ] 中的错误:维数不正确

我知道解决方案是删除最后一个逗号:

  #CAR during event window
    CAR <- sum(tesla$abn.ret[tesla$period=="event.period"])

只是想知道理解它的正确教学方式是什么,为什么在某些情况下最后需要逗号,但在我只过滤部分数据框时不需要逗号。

标签: rfiltering

解决方案


$符号,[[]][]有不同的含义。

简而言之:

  • $对数据框的一列或列表的一项进行签名和[[]]子集化。
    • 子集数据框的输出将是一个向量,而子集列表的输出将是与原始项目相同的类的变量,可以是数据框,另一个列表等...
    • 请务必注意,$它不接受列索引(仅列名),并且您不能$[[]].
  • []切片数据框或列表,整理出一个或多个元素。
    • 输出变量的类将与原始变量相同。
    • 如果您使用 切片数据帧[],则输出将是一个数据帧,这同样适用于列表等...

在您的特定情况下,您使用$符号来对变量进行子集化。然后,您尝试使用 对子集操作的输出进行切片[ , ],但结果证明输出是一个向量,并且一个向量始终只有一个维度,因此引发了错误。[]您应该使用(输出将是一个向量)或[[]](输出将是一个带有的向量)来分割您的向量length = 1

根据需要进行子集化的可能方法tesla

tesla$abn.ret[tesla$period == "event.period"]
tesla[["abn.ret"]][tesla$period == "event.period"]
tesla[tesla$period == "event.period", "abn.ret"]

您将使用tesla[["period"]]而不是获得相同的结果tesla$period

有关一些额外的详细信息/示例,请参阅由CRAN发布的对 R 的介绍

我希望它能以某种方式帮助你..!


推荐阅读