按列中的值过滤数据框

use*_*224 92 r filter dataframe

我正在使用数据集LearnBayes.对于那些想要查看实际数据的人:

install.packages('LearnBayes')
Run Code Online (Sandbox Code Playgroud)

我试图根据列中的值过滤掉行.例如,如果列值是"water",那么我想要那一行.如果列值是"牛奶",那么我不想要它.最终,我试图过滤掉所有饮用色谱柱都是"水"的人.

ada*_*ich 206

子命令不是必需的.只需使用数据帧索引

studentdata[studentdata$Drink == 'water',]
Run Code Online (Sandbox Code Playgroud)

阅读警告 ?subset

这是一种便于交互使用的便利功能.对于编程,最好使用标准的子集函数,如'[',特别是参数'子集'的非标准评估可能会产生意想不到的后果.

  • 谢谢@adamleerich.出于好奇,逗号背后的原因是什么? (6认同)
  • `[]`语法以正常的方式索引到二维数据帧中,矩阵在math:row和then列中被索引,用逗号分隔.在这种情况下,我们传递一个行索引向量(`studentData $ Drink =='water'`选出我们感兴趣的行),但是因为我们不想限制我们为那些列获取哪些列行(我们想要所有这些行),我们将索引对的列部分留空(因此逗号后面没有任何内容).这是语法糖,以避免必须给出所有列索引的向量. (6认同)
  • 这不会过滤掉数据,它只是用NA替换不符合条件的行。需要其他操作才能删除这些行 (2认同)

Dav*_*aid 68

试试这个:

subset(studentdata, Drink=='water')
Run Code Online (Sandbox Code Playgroud)

应该这样做.


rrs*_*rrs 34

以为我会用dplyr解决方案更新这个

library(dplyr)    
filter(studentdata, Drink == "water")
Run Code Online (Sandbox Code Playgroud)

  • 或者使用管道`studentdata%>%filter(Drink =="water")` (17认同)