r - 为什么使用单个字符索引的索引适用于数据框而不适用于矩阵?
问题描述
在数据帧中,[
可以使用单个字符执行 -indexing。例如mtcars["mpg"]
。
另一方面,在矩阵上尝试相同的结果NA
,例如
m = cbind(A = 1:5, B = 1:5)
m["A"]
# NA
...暗示这在某种程度上是对矩阵进行子集化的无效方法。
这是正常的 R 行为吗?如果是这样,它记录在哪里?
解决方案
cbind()
默认情况下创建一个矩阵。mtcars
是一个数据框。
class(cbind(A = 1:5, B = 1:5))
# [1] "matrix" "array"
class(mtcars)
# [1] "data.frame"
因为数据框是由list
s 列构建的dataframe["column_name"]
,使用 中的一个参数[
,默认将数据框视为list
,允许您选择列,与dataframe[, "column_name"]
.
Amatrix
没有这样的list
基础,所以如果你使用[
一个参数,它不会假设你想要列。用于matrix[, "column_name"]
从矩阵中选择列。
cbind
从头开始创建数据帧是一种不好的方法。您可以指定cbind.data.frame(A = 1:5, B = 1:5)
,但使用起来更简单、更清晰data.frame(A = 1:5, B = 1:5)
。但是,如果您要向现有数据框添加多列,则cbind(my_data_frame, A = 1:5, B = 1:5)
可以,只要其中一个参数已经是数据框,就会生成数据框。
推荐阅读
- ios - Xcode 11 构建系统漏洞?
- mongodb - 使用凭据连接到 MongoDB - Micronaut
- reactjs - 如何创建一个接收依赖项的自定义钩子?
- node.js - 在 Botframework 中向 Directline API 响应添加变量
- python - 如何在 Django 中向 QuerySets 添加自定义属性?
- python - 从数据库中删除选定的树视图项目的问题
- android - 构建 AOSP 自定义 rom
- javascript - 如何使用 Javascript 对 HTML 表单进行错误检查,包括验证字段是否填写正确?
- python - 这些模型是否等效?
- mongodb - 查找数组中 NO 项具有值的所有记录