2016-09-15 152 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