Vik*_*iki 2 printing r extract vector dataframe
我是R.的新手.刚刚通过在线教程学习.我的问题是:
1)为什么访问具有不同语法的相同列具有不同的输出呈现?
垂直显示:
> airquality["Ozone"]
Ozone
1 41
2 36
3 12
Run Code Online (Sandbox Code Playgroud)
水平显示:
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
Run Code Online (Sandbox Code Playgroud)
2)为什么以下有不同的数据类型?
> class(airquality["Ozone"])
[1] "data.frame"
> class(airquality$Ozone)
[1] "integer"
> class(airquality[["Ozone"]])
[1] "integer"
Run Code Online (Sandbox Code Playgroud)
两者的原因相同:airquality["Ozone"]返回数据帧,而airquality$Ozone返回向量.class()向您展示他们的对象类型.str()也很适合简洁地向你展示一个物体.
请参阅'['运算符,也称为'extract')或函数的帮助getElement().在R中,你可以调用help()一个特殊的字符或运算符,只需用引号括起来:?'['或者?'$'(在Python/C++/Java或大多数其他语言中我们称之为'切片').
至于为什么它们以不同的方式打印,print(obj)在R中发送一种特定于对象的打印方法.在这种情况下:print.dataframe,垂直打印数据帧列,使用行索引,vs print(或print.default)为向量,只是水平打印矢量内容,没有索引.
现在回到使用'['vs'$'运算符进行提取:
'[','[[和''''之间最重要的区别是'['可以选择多个元素,而另外两个'[['和'$'选择一个元素.
还有一个'[['提取语法,在选择单个元素(向量)时会像'$'那样做:
airquality[["Ozone"]]
[1] 41 36 12 18
Run Code Online (Sandbox Code Playgroud)
[["colname"]]和之间的区别在于$colname,在前者中,列名可以来自变量,但在后者中,它必须是字符串.因此[[varname]],您可以根据值来索引不同的列varname.
阅读有关exact=TRUE和drop=TRUE选项的文档extract().注意drop=TRUE仅适用于数组/矩阵,而不是数据框,它被忽略:
airquality["Ozone", drop=TRUE]
In `[.data.frame`(airquality, "Ozone", drop = TRUE) :
'drop' argument will be ignored
Run Code Online (Sandbox Code Playgroud)
这一切都有点令人困惑,一开始就输了,偏不一样,怪异的非自我解释.但是一旦你学会了语法,它就有意义了.在那之前,感觉就像从符号墙上撞了你的头.
请简要介绍R-intro和R-lang#Indexing HTML或PDF格式.为他们添加书签并定期回复.在公共汽车或飞机上阅读它们......
PS @Henry提到,严格来说,在访问数据帧时,我们应该插入一个逗号来消除列名称应用于列而不是行的歧义:airquality[, "Ozone"].如果我们使用数字索引,airquality[,1]并且airquality[1]都提取臭氧列,则airquality[1,]提取第一行.R正在应用一些聪明,因为通常字符串不是行索引.
无论如何,这一切都在文档中......不一定都是连续的或明确解释的......欢迎来到R :-)