2015-10-24 51 views
1

我道歉,如果我重複一個問題,但我是一個新手,我無法找到答案(可能是因爲我缺乏專業術語)。不同的結果子集列名

我產生像這樣的數據幀:

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。有沒有使用列名來評估條件語句(<,>,==)的方法?

編輯:我想我找到了答案部分,R評估

"some text" > 1000 
[1] TRUE 

,並且解釋了爲什麼我得到的所有行。

的問題是:什麼是評價使用列名的條件語句的好方法?

+4

是的,用'df [df [[「x1」]]> 3,「x2」]'。表達式「x1」> 3「的計算結果爲」TRUE「,因此在第二次嘗試中,您正在執行解釋結果的df [TRUE,」x2「]' –

+0

非常感謝。那樣做了。 – Zentaur

回答

-1

你的問題可以有很多答案,尤其是根據上下文和數據的您正在使用的類型。儘管如此,您可以簡單地使用df[x1 > 3, "x2"]

第一個參數是行,第二個參數是列。實質上,你所說的是返回所有的df行,其中x1大於3.就列而言,你只需要列x2。一旦你調整了不同的陳述,你會很快得到它。希望這可以幫助。

+2

'df [x1> 3,「x2」]'不適用於data.frame。它將帶有一個data.table,但這不是OP使用的。您需要'DF $''中的DF [DF $ X1> 3,「×2」]' – MrFlick

+1

另外,我覺得我們應該始終的前提下進行操作,所用的載體創建數據幀('x1'和'X2 ')在創建數據幀('df')後將不可用。 –

+0

@MrFlick - 謝謝,這是我的一個疏忽。奇怪的是,我在沒有'df $'的情況下運行了這一行,只是爲了確保它能夠正常工作,出於某種原因,我得到了同樣的結果。你知道發生了什麼事嗎? '> X1 < - C(1,2,3,4,5) > X2 < - C( 「一」, 「B」, 「C」, 「d」, 「E」) > DF < - data.frame(X1,X2) > > DF [DF $ X1> 3, 「×2」] [1] DE 水平:ABCDE > > DF [X1> 3, 「×2」] [1 ]德 級別:abcde' – JFu

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 

給出所有元素。我將不得不查找爲什麼一個角色總是大於一個數字的原因。我認爲這個原因已經在前面的某處詳細描述過了。如果我沒有記錯,它必須處理類之間的優先級。我會看看我能否找到它。