2017-09-13 90 views
0

我一直对这个数据处理的过了一天,知道它应该是简单的发生了......的R - 的一个因素试图组数据帧,但捕捉因素

我有一个包含4个变量的数据框。 reportID和TestResult之间存在1:1的关系,ReportID和所有其他变量之间存在1:1的关系。我认为将报告ID重新设置为一个因素是有道理的,但不确定。

reportID <- c(1000, 1000, 1000, 1001, 1002, 1002) 
TestResult <-c("aa","bb","cc","dd","aa","ee") 
dateSent <- c(as.Date("2017-08-01"),as.Date("2017-08-01"),as.Date("2017-08-01"),as.Date("2017-08-04"),as.Date("2017-08-05"),as.Date("2017-08-05")) 
otherVar1<- c(11,11,11,12,13,13) 
df<- data.frame(reportID,TestResult,dateSent,otherVar1) 

我觉得dplyr这里是正确的工具...

我要的是这样一个数据帧:

reportID Results dateSent  otherVar1 
1000  3  2017-08-01   11 
1001  1  2017-08-04   12 
1002  2  2017-08-05   13 

具体而言,对于每个结果行是太多的信息 - 我想统计每个报告ID记录结果的次数,并收集数据帧中的其他信息。

编辑/附加注释 在这个例子中数据我应该表示的事实,即某些数据框架元件具有在名称空间。在我的现实世界中的问题我的数据是这样的: “报告ID” < - C(1000,1000,1000,1001,1002,1002)

在列的名称空间带来的问题难以调试。我结束了使用下面建议的答案,但使用倾斜单引号。

Plot1Data <- VariantReport %>% 
group_by(`report id`,`date sent`,`other variable1`) %>% 
summarise(numresults=n()) 

回答

1

我不是100%肯定我正确地解释你的要求,但我认为这会工作

df %>% group_by(reportID,dateSent,otherVar1) %>% summarise(numresults=n())

+0

我想这就是它!我可以在group_by函数中放入任何数量的变量,如果它们在相同的报告ID中是统一的? –

+0

如果所有其他变量与您想要了解的主变量都是1:1,那么这应该是可以接受的。如果你有任何1:很多,但它不会产生预期的结果。 – simitpatel

1

先生,如果你有一个以上的otherVar,那么你可能会高兴使用group_by_at,并指定所有otherVars非常容易。

library(dplyr);library(magrittr) 

# if you know the columnames string pattern 
    df2 %>% 
    group_by_at(.vars = vars(reportID, dateSent, matches("otherVar"))) %>% 
    summarize(Results = n()) 

# or you prefer range of variables from:to 
    df2 %>% 
    group_by_at(.vars = vars(reportID, dateSent, otherVar1:otherVar1)) %>% 
    summarize(Results = n())