使用列名

时间:2015-10-24 20:57:00

标签: r conditional subset

如果我复制一个问题,我很抱歉,但我是新手,我找不到答案(可能是因为我缺乏行话)。

我生成了一个像这样的数据框:

x1 <- c(1,2,3,4,5)
x2 <- c("a", "b", "c", "d", "e")
df <- data.frame(x1,x2)

   x1 x2
1  1  a
2  2  b
3  3  c
4  4  d
5  5  e

然后我尝试在第一列上进行子集调节,就像这样

df[df$x1>3, "x2"]

结果如预期

[1] d e

然而,当我尝试

df["x1" >3, "x2"]
[1] a b c d e

R似乎忽略条件语句并返回整列x2。有没有办法使用列名来评估条件语句(&lt;,&gt;,==)?

编辑:我想我找到了部分答案:R评估

"some text" > 1000 
[1] TRUE

这就解释了为什么我得到了所有的行。

问题仍然存在:使用列名评估条件语句的好方法是什么?

2 个答案:

答案 0 :(得分:1)

我不会进行长篇解释,因为我认为你可以通过几个例子清楚地看到这个问题。但基本上,如果你想使用字符数据框名称,你需要一个像这样的结构

df[df[["x1"]] > 3, "x2"]
# [1] d e
# Levels: a b c d e

第二次尝试发生的事情是这个

"x1" > 3
# [1] TRUE

然后基本上你做的就是这个

df[TRUE, "x2"]
# [1] a b c d e
# Levels: a b c d e

给出所有元素。我必须查找字符总是大于数字的原因。我认为这个原因之前已在此处详细描述过。如果我没记错的话,它与类之间的优先级有关。我会看看能不能找到它。

答案 1 :(得分:-1)

您的问题可能会有很多答案,尤其取决于您使用的上下文和数据类型。但在这种特殊情况下,您只需使用df[x1 > 3, "x2"]

第一个参数用于行,第二个参数用于列。基本上,您要说的是返回x1大于3的所有df行。就列而言,您只需要列x2。一旦你调整了不同的陈述,你就会很快得到它。希望这会有所帮助。