从data.frames中提取列的不同方法

从data.frames中提取列的不同方法,r,dataframe,R,Dataframe,我见过人们用几种不同的方法从R中的data.frame中拉出一列: df[,1] df$colname 以及: 我最近倾向于使用后者,但我只是认为它们可能在做不同的事情。这两者之间有什么区别,为什么一个人更喜欢一个而不是另一个 谢谢 “[[”版本不允许选择超过1个元素(尽管单个元素可能是长度大于1的原子向量或任意复杂度的列表,“[,j]”版本允许返回多个项目。如果提供长度大于2的向量,“[”表单将尝试从“[[”的递归应用程序中提取元素,首先提取列结果的连续元素,然后提取该向量中的项。(…因为“

我见过人们用几种不同的方法从R中的
data.frame
中拉出一列:

df[,1]
df$colname
以及:

我最近倾向于使用后者,但我只是认为它们可能在做不同的事情。这两者之间有什么区别,为什么一个人更喜欢一个而不是另一个

谢谢

“[[”版本不允许选择超过1个元素(尽管单个元素可能是长度大于1的原子向量或任意复杂度的列表,“[,j]”版本允许返回多个项目。如果提供长度大于2的向量,“[”表单将尝试从“[[”的递归应用程序中提取元素,首先提取列结果的连续元素,然后提取该向量中的项。(…因为“元素”可能是多值向量。)这有点像数组提取

test <- data.frame(a=1:5, b=letters[1:5], c=setNames(1:5, letters[1:5]) )
# also would give same results for data.frame
test[[3]]
#1 2 3 4 5 
test[[c(1,3)]]
#[1] 3
# In this case the same as:
test[3,1]
#[1] 3
test“[[”版本不允许选择超过1个元素(尽管单个元素可能是长度大于1的原子向量或任意复杂度的列表,而“[,j]”版本允许返回多个项目。如果提供长度大于2的向量,“[[”表单将尝试从“[[”的递归应用程序中提取元素,首先提取列结果的连续元素,然后提取该向量中的项。(…因为“元素”可能是多值向量。)这有点像数组提取

test <- data.frame(a=1:5, b=letters[1:5], c=setNames(1:5, letters[1:5]) )
# also would give same results for data.frame
test[[3]]
#1 2 3 4 5 
test[[c(1,3)]]
#[1] 3
# In this case the same as:
test[3,1]
#[1] 3
test“[[”版本不允许选择超过1个元素(尽管单个元素可能是长度大于1的原子向量或任意复杂度的列表,而“[,j]”版本允许返回多个项目。如果提供长度大于2的向量,“[[”表单将尝试从“[[”的递归应用程序中提取元素,首先提取列结果的连续元素,然后提取该向量中的项。(…因为“元素”可能是多值向量。)这有点像数组提取

test <- data.frame(a=1:5, b=letters[1:5], c=setNames(1:5, letters[1:5]) )
# also would give same results for data.frame
test[[3]]
#1 2 3 4 5 
test[[c(1,3)]]
#[1] 3
# In this case the same as:
test[3,1]
#[1] 3
test“[[”版本不允许选择超过1个元素(尽管单个元素可能是长度大于1的原子向量或任意复杂度的列表,而“[,j]”版本允许返回多个项目。如果提供长度大于2的向量,“[[”表单将尝试从“[[”的递归应用程序中提取元素,首先提取列结果的连续元素,然后提取该向量中的项。(…因为“元素”可能是多值向量。)这有点像数组提取

test <- data.frame(a=1:5, b=letters[1:5], c=setNames(1:5, letters[1:5]) )
# also would give same results for data.frame
test[[3]]
#1 2 3 4 5 
test[[c(1,3)]]
#[1] 3
# In this case the same as:
test[3,1]
#[1] 3

test看起来@DWin和@B.Mr.W介绍了使用
[
[
从数据帧中提取列的最常用方法

作为
[
[[
方法的替代方法,您还可以使用基本函数
subset
,从数据帧中提取列

例如,
subset(mtcars,select=mpg)
将从
mtcars
数据集中提取名为
mpg
的列。或者,如果需要多列,可以包含列名向量,例如
subset(mtcars,select=c(mpg,cyl))
。请注意,使用
子集
功能时,不需要引用列名

您还可以通过索引以相同的方式获取列:
subset(mtcars,select=1)
选择数据帧中的第一列,与
subset(mtcars,select=mpg)
相同


虽然在简单地选择列时可能不使用此功能,但是
subset
函数可以生成更易于理解和详细的代码,并且在提取某些感兴趣的行(例如
子集)时也很有用(mtcars,subset=hp看起来@DWin和@B.Mr.W介绍了使用
[
[
从数据框中提取列的最常用方法

作为
[
[[
方法的替代方法,您还可以使用基本函数
subset
,从数据帧中提取列

例如,
subset(mtcars,select=mpg)
将从
mtcars
数据集中提取名为
mpg
的列。或者,如果需要多列,可以包含列名向量,例如
subset(mtcars,select=c(mpg,cyl))
。请注意,使用
子集
功能时,不需要引用列名

您还可以通过索引以相同的方式获取列:
subset(mtcars,select=1)
选择数据帧中的第一列,与
subset(mtcars,select=mpg)
相同


虽然在简单地选择列时可能不使用此功能,但是
subset
函数可以生成更易于理解和详细的代码,并且在提取某些感兴趣的行(例如
子集)时也很有用(mtcars,subset=hp看起来@DWin和@B.Mr.W介绍了使用
[
[
从数据框中提取列的最常用方法

作为
[
[[
方法的替代方法,您还可以使用基本函数
subset
,从数据帧中提取列

例如,
subset(mtcars,select=mpg)
将从
mtcars
数据集中提取名为
mpg
的列。或者,如果需要多列,可以包含列名向量,例如
subset(mtcars,select=c(mpg,cyl))
。请注意,使用
子集
功能时,不需要引用列名

您还可以通过索引以相同的方式获取列:
subset(mtcars,select=1)
选择数据帧中的第一列,与
subset(mtcars,select=mpg)
相同

虽然在简单选择列时可能不使用此选项,但是
subset
函数可能会导致