如果我复制一个问题,我很抱歉,但我是新手,我找不到答案(可能是因为我缺乏行话)。
我生成了一个像这样的数据框:
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
这就解释了为什么我得到了所有的行。
问题仍然存在:使用列名评估条件语句的好方法是什么?
答案 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。一旦你调整了不同的陈述,你就会很快得到它。希望这会有所帮助。