从数据框中进行子集

时间:2016-06-27 21:13:33

标签: r

我是在学习过程中的早期。我说我的数据框中有一个名为" Gender"的列。如果我想要检索性别为"女性"我至少有两种方法可以做到这一点:

FemaleSmokers <- df[df$Gender=="female", , drop = FALSE]
FemaleSmokers <- subset(df, Gender=="female")

1)是否有最佳做法何时使用一个而不是另一个? 2)在第一种方法中,当R应该知道我使用哪个数据帧时,为什么我需要在列前加上数据帧的名称。

2 个答案:

答案 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")