Bra*_*sen 18 lookup indexing r dataframe
我在哪里可以找到有关通过以下方式调用data.frame中列之间差异的信息:
df <- data.frame(x=1:20,y=letters[1:20],z=20:1)
df$x
df["x"]
Run Code Online (Sandbox Code Playgroud)
它们都返回"相同"的结果,但不一定是相同的格式.我注意到的另一件事是df $ x返回一个列表.而df ["x"]返回data.frame.
编辑:然而,知道在哪种情况下使用哪一个已经成为一个挑战.这里有最好的做法,还是真的要知道命令或功能需要什么?到目前为止,如果我的功能最初不起作用(试错),我就一直在骑自行车.
除了手册中的索引页面,您还可以在帮助页面上找到这个简洁的描述?"$":
通过'['索引类似于原子向量并选择指定元素的列表.
两个'[['和'$'选择列表中的单个元素.主要的区别是'$'不允许计算指数,而'[''.'x $ name'相当于'x [["name",exact = FALSE]]'.此外,'[['的部分匹配行为可以使用'exact'参数控制.
当然,函数调用是不同的.见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
Run Code Online (Sandbox Code Playgroud)
在大多数情况下(IMHO),这比任何子设置方法都要清晰得多.
有一件事我还没有看到明确的解释是,[和[[可用于基于变量或表达式的值来选择,而$不能.你可以做的IE:
> 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
Run Code Online (Sandbox Code Playgroud)