我是在学习过程中的早期。我说我的数据框中有一个名为" Gender"的列。如果我想要检索性别为"女性"我至少有两种方法可以做到这一点:
FemaleSmokers <- df[df$Gender=="female", , drop = FALSE]
FemaleSmokers <- subset(df, Gender=="female")
1)是否有最佳做法何时使用一个而不是另一个? 2)在第一种方法中,当R应该知道我使用哪个数据帧时,为什么我需要在列前加上数据帧的名称。
答案 0 :(得分:2)
希望这个成功的例子会帮助你
// Listen for deleted comments in the Firebase database
commentsRef.observeEventType(.ChildRemoved, withBlock: { (snapshot) -> Void in
let index = self.indexOfMessage(snapshot)
self.comments.removeAtIndex(index)
self.tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: index, inSection: 1)], withRowAnimation: UITableViewRowAnimation.Automatic)
})
func indexOfMessage(snapshot: FIRDataSnapshot) -> Int {
var index = 0
for comment in self.comments {
if (snapshot.key == comment.key) {
return index
}
index += 1
}
return -1
}
这只是将df索引为
df<-data.frame( Name = c("mark", "joe", "cathy","zoya"),
Gender = c("Male","Male","Female", "Female"))
Name Gender
1 mark Male
2 joe Male
3 cathy Female
4 zoya Female
subsetting of a dataframe (df) is done by
df[row,column]
For example, df[1:2,1:2]
Name Gender
1 mark Male
2 joe Male
In your case, we are evaluating a condition on the dataframe
# both are valid
df[df$Gender == "Female",] or df[df[,2] == "Female",]
df[c(3,4),] or df[c(FALSE,FALSE,TRUE,TRUE),]
df$Gender == "Female"
[1] FALSE FALSE TRUE TRUE
基本上是第3行和第4行,以及所有列
因此,您基本上是提取变量以将它们作为索引传递。要从数据框中提取特定列的变量,我们在数据框帮助(&#34; $&#34;)帮助中使用$(&#34; [&#34;)。
另一个有用的资源http://www.ats.ucla.edu/stat/r/modules/subsetting.htm
重新考虑你的问题,当R需要知道你正在使用的df时,为什么要用df为列添加序号!我没有比上面更好的解释,您需要提取变量以传递已评估条件的行索引df[c(3,4),]
。可能在dataframe列中不会将其称为变量。
但是,我有一个好消息,事情就像你想象的那样。其中,列称为变量。它是TRUE
。其中列被称为变量,因此易于理解索引,连接和其他数据操作的语法。这是一个惊人的包,很容易掌握它。
datatable
是的,你不需要再次为df做序,只需传递列。最好的部分是,与data.frame相比,它更高效,更快速,更易于使用 我希望它有所帮助。
答案 1 :(得分:0)
如何使用filter
库中的dplyr
函数?
FemaleSmokers <- filter(df, Gender=="female")