在哪里可以找到有关通过以下方式调用 data.frame 中的列之间的差异的信息:
df <- data.frame(x=1:20,y=letters[1:20],z=20:1)
df$x
df["x"]
它们都返回“相同”的结果,但格式不一定相同。我注意到的另一件事是 df$x 返回一个列表。而 df["x"] 返回一个 data.frame。
编辑:然而,知道在哪种情况下使用哪个已经成为一项挑战。这里是否有最佳实践,或者是否真的可以归结为了解命令或功能需要什么?到目前为止,如果我的函数一开始不起作用(反复试验),我就会循环使用它们。
另一个区别是
df$w
返回 NULL
和 df['w']
或 df[['w']]
会在示例数据帧中给出错误。
如果我没记错的话,
df$x
和df[['x']]
是一样的。 [[
用于选择任何单个元素,而 [
返回所选元素的列表。另请参阅语言参考。我通常看到 [[ 用于列表,[ 用于数组,$ 用于获取单个列或元素。如果您需要表达式(例如 df[[name]] 或 df[,name]),则也可以使用 [ 或 [[ 表示法。如果选择多列,也会使用 [ 符号。例如 df[,c('name1', 'name2')]。我认为这没有最佳实践。
除了手册中的索引页面之外,您还可以在帮助页面上找到这个简洁的描述?"$":
‘[’索引类似于原子索引 向量并选择一个列表 指定元素。
‘[[’和‘$’都选择一个 列表的元素。主要的 区别在于‘$’不允许 计算索引,而“[[”则计算索引。 ‘x$name’ 等价于‘x[["name", 准确 = FALSE]]'。另外,部分 ‘[[’的匹配行为可以是 使用“精确”参数进行控制。
当然,函数调用是不同的。请参阅
get("[.data.frame")
与 get("[[.data.frame")
与 get("$")
在这种情况下,对于大多数用途,我会完全避免子设置并尝试记住
$
、[
和 [[
对数据框的作用。我就用with()
:
> df <- data.frame(x = 1:20, y = letters[1:20], z = 20:1)
> with(df, y)
[1] a b c d e f g h i j k l m n o p q r s t
Levels: a b c d e f g h i j k l m n o p q r s t
在大多数情况下,这比任何子设置方法都清晰得多(恕我直言)。
我没有看到明确解释的一件事是,
[
和[[
可以用来根据变量或表达式的值进行选择,而$
则不能。即你可以这样做:
> example_frame <- data.frame(Var1 = c(1,2), Var2 = c('a', 'b'))
> x <- 'Var1'
> example_frame$x
NULL # Not what you wanted
> example_frame[x]
Var1
1 1
2 2
> example_frame[[x]]
[1] 1 2
> example_frame[[ paste(c("V","a","r",2), collapse='') ]]
[1] a b
Levels: a b
[
和
[[
之间的差异已被其他帖子和其他问题很好地涵盖了。
列。
df$x
和
df[[x]]
做同样的事情。假设您有一个名为
one
的数据集。这些变量之一是因子变量,
Region
。使用
one$Region
将允许您选择特定变量。考虑以下几点:
one <- read.csv("IED.csv")
one$Region
运行以下代码还可以让您隔离该变量/级别。
one[["Region"]]
每个代码都会产生以下输出:
> one$Region
[1] RC SOUTH RC SOUTH RC SOUTH RC EAST RC EAST
[6] RC EAST RC EAST RC EAST RC EAST RC EAST
[11] RC SOUTH RC SOUTH RC EAST RC EAST RC EAST
[16] RC EAST RC EAST RC SOUTH RC SOUTH RC EAST
[21] RC SOUTH RC EAST RC CAPITAL RC EAST RC EAST
> one[["Region"]]
[1] RC SOUTH RC SOUTH RC SOUTH RC EAST RC EAST
[6] RC EAST RC EAST RC EAST RC EAST RC EAST
[11] RC SOUTH RC SOUTH RC EAST RC EAST RC EAST
[16] RC EAST RC EAST RC SOUTH RC SOUTH RC EAST
[21] RC SOUTH RC EAST RC CAPITAL RC EAST RC EAST
“它们都返回“相同”的结果,但不一定采用相同的格式。” - 我没有注意到任何差异。每个命令以相同的格式产生相同的输出。也许是你的数据。
希望有帮助。
编辑:
误读了原来的问题。
df["x"]
产生以下结果:
> one["Region"]
Region
1 RC SOUTH
2 RC SOUTH
3 RC SOUTH
4 RC EAST
5 RC EAST
6 RC EAST
7 RC EAST
8 RC EAST
9 RC EAST
10 RC EAST
不确定为什么会出现这种差异。
df$x 返回包含“x”列的值的向量。这意味着结果不是数据帧,而是值向量。