我在哪里可以找到有关通过以下方式调用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。
编辑:然而,知道在哪种情况下使用哪一个已经成为一个挑战。这里有最好的做法,还是真的要知道命令或功能需要什么?到目前为止,如果我的功能最初不起作用(试错),我就一直在骑自行车。
答案 0 :(得分:16)
另一个区别是df$w
返回NULL
而df['w']
或df[['w']]
会对您的示例数据框造成错误。
答案 1 :(得分:14)
如果我没弄错的话,df$x
与df[['x']]
相同。 [[
用于选择任何单个元素,而[
返回所选元素的列表。另见the language reference。我经常看到[[用于列表,[用于数组和$用于获取单个列或元素。如果你需要一个表达式(例如df [[name]]或df [,name]),那么使用[或[[表示法也是。如果选择了多个列,也会使用[表示法。例如df [,c('name1','name2')]。我认为没有最好的做法。
答案 2 :(得分:9)
除了手册中的索引页面,您还可以在帮助页面上找到这个简洁的描述?“$”:
索引'['类似于原子 向量并选择一个列表 指定的元素。
两个'[['和'$'选择一个 列表的元素。主要的 区别是'$'不允许 计算指数,而'[['确实如此。 'x $ name'相当于'x [[“name”, exact = FALSE]]'。另外,部分 匹配行为'[['可以 使用'exact'参数控制。
函数调用当然是不同的。请参阅get("[.data.frame")
与get("[[.data.frame")
对比get("$")
答案 3 :(得分:7)
在这种情况下,对于大多数用途,我会完全避免进行子设置并尝试记住$
,[
和[[
对数据框的影响。我只想使用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
在大多数情况下(IMHO),这比任何子设置方法都要清晰得多。
答案 4 :(得分:6)
我未明确解释过的一件事是[
和[[
可以用根据变量或表达式的值进行选择{{1不能。你可以这样做:
$
other posts和other questions很好地涵盖了> 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
和[
之间的差异。
答案 5 :(得分:5)
如果你使用df [,“x”]而不是df [“x”],你将获得与df $ x相同的结果。逗号表示您按名称选择列。
答案 6 :(得分:0)
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
不确定为何会出现差异。