gpt4 book ai didi

r - 为什么数据框列上的 $ 和 [ 给出不同的输出表示和数据类型?

转载 作者:行者123 更新时间:2023-12-01 14:00:10 24 4
gpt4 key购买 nike

我是 R 新手。只是通过在线教程学习。我的问题是:

1)为什么用不同的语法访问同一列会有不同的输出表现?

垂直显示:

> airquality["Ozone"]
Ozone
1 41
2 36
3 12

水平显示:

airquality$Ozone
[1] 41 36 12 18 NA 28 23 19 8
[46] NA 21 37 20 12 13 NA NA NA
[91] 64 59 39 9 16 78 35 66 122

2)为什么以下有不同的数据类型?

> class(airquality["Ozone"])
[1] "data.frame"
> class(airquality$Ozone)
[1] "integer"
> class(airquality[["Ozone"]])
[1] "integer"

最佳答案

两者的原因相同:airquality["Ozone"] 返回一个数据帧,而 airquality$Ozone 返回一个向量。 class() 显示它们的对象类型。 str() 也适合简洁地显示一个对象。

请参阅 '[' operator 上的帮助,也称为“提取”,或函数 getElement()。在 R 中,您可以对特殊字符或运算符调用 help(),只需用引号将其引起来:?'['?'$' (在 Python/C++/Java 或大多数其他语言中,我们称之为“切片”)。

至于为什么它们的打印方式不同,print(obj) R 中在底层调度一个特定于对象的打印方法。在本例中:print.dataframe ,它垂直打印数据帧列,并带有行索引,与 print (或 print.default) 对于向量,它仅水平打印向量内容,没有索引。

现在回到使用“[”与“$”运算符进行提取:

The most important distinction between ‘[’, ‘[[’ and ‘$’ is that the ‘[’ can select more than one element whereas the other two ’[[’ and ‘$’ select a single element.

还有一个“[[”提取语法,其作用类似于“$”选择单个元素(向量)的作用:

airquality[["Ozone"]]
[1] 41 36 12 18

[["colname"]]$colname 之间的区别是,在前者中,列名可以来自变量,但在后者中,它必须是一个字符串。因此,[[varname]] 将允许您根据 varname 的值对不同的列建立索引。

阅读有关 extract() 上的 exact=TRUEdrop=TRUE 选项的文档。注意 drop=TRUE 仅适用于数组/矩阵,不适用于数据帧,它会被忽略:

airquality["Ozone", drop=TRUE]
In `[.data.frame`(airquality, "Ozone", drop = TRUE) :
'drop' argument will be ignored

一开始这一切都有点令人困惑、令人反感、古怪的不同和奇怪的不言自明。但一旦你学会了语法,它就有意义了。在那之前,感觉就像把头从符号墙上撞下来一样。

请简要浏览一下R-introR-lang#Indexing HTML 或 PDF 格式。为它们添加书签并定期回来查看它们。在公共(public)汽车或飞机上阅读它们...

PS 正如 @Henry 提到的,严格来说,在访问数据帧时,我们应该插入一个逗号来消除列名应用于列而不是行的歧义:airquality[, "Ozone"]。如果我们使用数字索引,airquality[,1]airquality[1] 都会提取 Ozone 列,而 airquality[1,] 提取第一行。 R 正在应用一些技巧,因为通常字符串不是行索引。

无论如何,这一切都在文档中...不一定都是连续的或清楚解释的...欢迎使用 R :-)

关于r - 为什么数据框列上的 $ 和 [ 给出不同的输出表示和数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com