r - 过滤数据,逗号与非逗号
问题描述
我有以下代码
#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"])
只是想知道理解它的正确教学方式是什么,为什么在某些情况下最后需要逗号,但在我只过滤部分数据框时不需要逗号。
解决方案
$
符号,[[]]
并[]
有不同的含义。
简而言之:
$
对数据框的一列或列表的一项进行签名和[[]]
子集化。- 子集数据框的输出将是一个向量,而子集列表的输出将是与原始项目相同的类的变量,可以是数据框,另一个列表等...
- 请务必注意,
$
它不接受列索引(仅列名),并且您不能$
在[[]]
.
[]
切片数据框或列表,整理出一个或多个元素。- 输出变量的类将与原始变量相同。
- 如果您使用 切片数据帧
[]
,则输出将是一个数据帧,这同样适用于列表等...
在您的特定情况下,您使用$
符号来对变量进行子集化。然后,您尝试使用 对子集操作的输出进行切片[ , ]
,但结果证明输出是一个向量,并且一个向量始终只有一个维度,因此引发了错误。[]
您应该使用(输出将是一个向量)或[[]]
(输出将是一个带有的向量)来分割您的向量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 的介绍。
我希望它能以某种方式帮助你..!
推荐阅读
- python-3.x - uWSGI +nginx 设置 - Dash (Plotly) 部署
- javascript - 如何使用 opencv_contrib 构建自定义 opencv.js
- javascript - Highcharts: Drilldown from map to chart
- jmeter - JMeter:响应数据与预期不同
- c++ - Template metaprogram to find similar consecutive typenames
- c# - 如何根据来源过滤 QnAMaker 问题
- asp.net - 有没有办法在数据表的表达式中有 3 个条件?
- git - 用于了解分叉存储库的拉取请求 (PR) 的文件更改的 Git 命令
- r - GGplot boxplot 和 dotplot 并排
- python - QTextEdit 上的样式滚动条(使用自定义图像)