问题描述
我有一个包含许多列的数据框。
我想创建一个仅包含某些列的新数据框,因此我使用了.style()
,效果很好。
subset
要使事情复杂化,我希望使用一个间隔来标识子集中的一列,例如newDF<-subset(oldDF,col1==1)
。
例如,我希望新的dataFrame包含X
的值大于零的oldDF
的所有行
Col2Name
问题是,当我使用X <- "colName2"
newDF<-subset(oldDF,X>0)
运行此程序时,我什么也没得到。
当我使用特定的列名(而不是间隔)运行它时
X
我得到正确的结果。
当我使用oldDF [,X]测试X中的值时,我得到了正确的列。
我想念什么?我在做什么错了?
解决方法
您可以尝试以下方式:
newdf <- olddf[(olddf$colName2 > 0),]
,
由于您尚未提供数据,因此我以mtcars
数据集为例。使用时:
subset(mtcars,cyl == 4)
R正在cyl
中寻找名为mtcars
的列。现在,当您这样做时:
X <- "cyl"
subset(mtcars,X == 4)
R将在X
中查找名为mtcars
的列,该列显然不存在,因此将提供一个空数据框。
在某些情况下,您可以子集通过变量的数据框,而使用subset
并不是其中一种。您还会注意到mtcars$cyl
可以正常工作,但是mtcars$X
出于相同的原因不能正常工作。
当您想使用变量对数据框进行子集化时,可以使用mtcars[,X]
或mtcars[[X]]
。(如您所知)。