R中的数据帧过滤器

时间:2016-04-13 20:04:31

标签: r statistics

对于过滤数据框时更符合,符号的含义感到有点困惑,更具体地说,是这行代码df2 <- df[df$c6 <= 1 & df$c4 > 200,]。我试图找到一些在线文档,但失败了,我认为,意味着没有对原始数据框的其他列进行过滤。如果有人可以评论,在进行过滤时的意思,那就太棒了。

我在R,数据和结果中发布我的代码,

代码

df <- read.csv('~/Downloads/sample.csv', sep=',', header=F, stringsAsFactors=FALSE)
names(df) <- c('c1', 'c2', 'c3', 'c4', 'c5')
df$c5 <- as.numeric(df$c5)
df$c6 <- df$c5 *1000 / df$c4
table(df$c2)
df2 <- df[df$c6 <= 1 & df$c4 > 200,]

数据

10321,t1,1,240,0
16123,t1,20,4492,0
19123,t2,3.1,175,0
35321,t1,3,2304,4.608

结果

> df
     c1 c2   c3   c4    c5 c6
1 10321 t1  1.0  240 0.000  0
2 16123 t1 20.0 4492 0.000  0
3 19123 t2  3.1  175 0.000  0
4 35321 t1  3.0 2304 4.608  2
> df2 <- df[df$c6 <= 1 & df$c4 > 200,]
> df2
     c1 c2 c3   c4 c5 c6
1 10321 t1  1  240  0  0
2 16123 t1 20 4492  0  0

1 个答案:

答案 0 :(得分:3)

Data.frames可以按行或列引用。格式为df[row, column]。如果选择一行,则将返回该行中的所有列。这就是您对示例所做的操作,即您正在过滤行df[ filter condition , ]

以下是行和列引用的一些说明:

df[3]  #column 3
#1  1.0
#2 20.0
#3  3.1
#4  3.0
class(df[3])
#[1] "data.frame"

df[,3]  #column 3
#[1]  1.0 20.0  3.1  3.0
class(df[,3])
#[1] "numeric"

df[3,]  #row 3
#c1 c2  c3  c4 c5 c6
#3 19123 t2 3.1 175  0  0
class(df[3,])
#[1] "data.frame"

df$c6 <= 1 & df$c4 > 200
#[1]  TRUE  TRUE FALSE FALSE  #Only rows 1 and 2 meet the conditions
all(df[df$c6 <= 1 & df$c4 > 200, ] == df[ c(TRUE, TRUE, FALSE, FALSE),])
#[1] TRUE