2016-09-15 151 views
0

以下是根據我的數據的一小部分例子:不正確的函數輸出

NAME <- c("SYNOP", "SYNOP", "METAR", "METAR", "SYNOP", "METAR") 
AIR <- c(6.7, 8.3, 9.2, 8.9, 9.1, 8.7) 
Example <- data.frame(NAME, AIR) 

    NAME AIR 
1 SYNOP 6.7 
2 SYNOP 8.3 
3 METAR 9.2 
4 METAR 8.9 
5 SYNOP 9.1 
6 METAR 8.7 

我用grep來選擇這個數據,其中NAME == METAR的一個子集,並找出出現次數的數量:

ex_METAR <- Example[grep("METAR", Example$NAME), ] 
nrow(ex_METAR) 

我不得不重複這對於大量的NAME情況,並希望通過利用它的功能來加速這一進程。但是我必須做一些錯誤的,因爲我每次都得到一個錯誤信息:

example_Function <- function (A, B, C) { 
A[grep("B", A$C), ] 
} 

> example_Function(Example, "METAR", Example$NAME) 
[1] NAME AIR 
<0 rows> (or 0-length row.names) 

我都以爲是我是怎麼描述「METAR」所以我嘗試了功能,只有A和C,並獲得同樣的錯誤。

example_Function <- function (A, C) { 
A[grep("METAR", A$C), ] 
} 
example_Function(Example, Example$NAME) 

有沒有我正在積極做錯的事情,或者這只是不起作用?我從來沒有嘗試過以這種方式調整功能。或者,也許功能是錯誤的路要走?!提前致謝。

(不是Aggregate a dataframe on a given column and display another column重複它正在尋找與最大值子集。我需要子集在列的話,知道多少次發生了。)

+0

的可能的複製[集合在給定的列中的數據幀,並顯示另一列(http://stackoverflow.com/questions/6289538/agg regate-a-dataframe-on-a-given-column-and-display-another-column) – Sotos

回答

1

我認爲這是你在找什麼爲:

NAME <- c("SYNOP", "SYNOP", "METAR", "METAR", "SYNOP", "METAR") 
AIR <- c(6.7, 8.3, 9.2, 8.9, 9.1, 8.7) 
Example <- data.frame(NAME, AIR) 

library(dplyr) 

Example %>% group_by(NAME) %>% summarize(Count=n()) 

輸出:

Source: local data frame [2 x 2] 

    NAME Count 
    (fctr) (int) 
1 METAR  3 
2 SYNOP  3 
+0

是的,這幾乎是非常複雜的做法!謝謝 – Visser

+0

如果能解決您的問題,請您將其標記爲答案。謝謝! – prateek1592

+0

謝謝@ prateek1592,我有,你只需等待,然後再允許你接受答案。 我還有一個問題,我可以合併一個循環或適用於此?實際上,我在同一張表中也有很多列需​​要應用此代碼(不在此示例中!) – Visser