我想要一个包含数据框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),]
的结果相同,但由于某种原因它无效。
答案 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,]