使用逻辑测试进行索引

时间:2013-11-26 13:00:34

标签: r

我想要一个包含数据框df的所有行的变量,其中x大于y。但由于某种原因,我不断收到这个奇怪的错误。

> x <- c(5,6,7,8,9,10)
> y <- c(1,7,8,29,0,1)
> 
> df <- data.frame(x, y)
> 
> x.is.more <- df[,"x" > "y"]; x.is.more
data frame with 0 columns and 6 rows

上面的代码应该与x.is.more <- df[c(1,6),]的结果相同,但由于某种原因它无效。

4 个答案:

答案 0 :(得分:3)

subset可能是最简单的方法:

subset(df, x>y)
   x y
1  5 1
5  9 0
6 10 1

答案 1 :(得分:2)

如果要将新变量附加到现有数据框

,可以使用transform
> transform(df, x.is.more= x>y)
   x  y x.is.more
1  5  1      TRUE
2  6  7     FALSE
3  7  8     FALSE
4  8 29     FALSE
5  9  0      TRUE
6 10  1      TRUE

如果您只想要一个新变量

,请使用with
> x.is.more <- with(df, x>y)
> x.is.more
[1]  TRUE FALSE FALSE FALSE  TRUE  TRUE

如果您想要子集,请尝试

> df[ with(df, x>y), ]  # equivalent to df[ x.is.more, ]
   x y
1  5 1
5  9 0
6 10 1

或直接使用{@ 1}}功能,如@James回答

答案 2 :(得分:1)

试试这个:

#dummy dataframe
df <- data.frame(x=c(5,6,7,8,9,10),
                 y=c(1,7,8,29,0,1))

#find x>y
x.is.more <- df[df$x > df$y, ]

#output
x.is.more
#   x y
#1  5 1
#5  9 0
#6 10 1

答案 3 :(得分:0)

啊哈!我想通了。

而不是,

x.is.more <- df[,"x" > "y"]

我应该,

x.is.more <- df[x > y,]