2015-11-08 45 views
1

OK,沒找到一個更好的標題子集化在R A數據幀 - 意想不到的結果

比方說,我有my_dataframe:

Name Value1 Value2 
AA 10  20 
BB 15  30 

如果我這樣做: nrow(my_dataframe[my_dataframe$Value2>20,] 我得到 '1'結果

我想創建my_second_dataframe,比如有隻列「值」:

my_second_dataframe<- my_dataframe[,'Value2', drop=FALSE] 

讓我看看:

class(my_second_dataframe) 
[1] "data.frame" 
class(my_second_dataframe$Value2) 
[1] "numeric" 

但隨後:

nrow(my_second_dataframe[my_second_dataframe$Value2>20,] 
NULL 

????? 這將是一個函數的一部分,我想在這個函數中隔離一個選擇的列,並根據閾值數量獲取該列的行數。我究竟做錯了什麼?

由於

+2

在你使用'下降= FALSE',爲什麼你沒有使用,對於第二個第一案'my_second_dataframe [my_second_dataframe $值2> 20日下降= FALSE ]'因爲只有一列,它會從data.frame轉換爲'vector'。或者你可以使用'subset(my_second_dataframe,Value2> 20)' – akrun

+0

嗨,謝謝。添加'drop = FALSE'確實有效。但我仍然不明白。當我檢查原始數據集上的行號時,我不需要指定drop參數。 此外,我不相信子集函數(請參閱警告) – madmaxthc

+0

默認情況下,在子集中,它是'drop = FALSE',但如果您使用'[',它是'drop = TRUE'。你可以從'?Extract'看到更多的細節 – akrun

回答

2

?Extract

降基於對文檔的:對於矩陣和陣列。如果爲TRUE,則結果被強制爲 儘可能低的維數(請參閱示例)。這僅適用於 提取元素,不適用於替換。請參閱下面的詳細信息 。

此外,默認情況下它是drop = TRUE[

x[i, j, ... , drop = TRUE] 

所以,我們需要指定drop = FALSE避免強迫到儘可能低的尺寸時,只有一個單一的列或行。

在OP的例子

my_second_dataframe[my_second_dataframe$Value2>20,, drop=FALSE]