【发布时间】:2015-10-07 23:08:32
【问题描述】:
我有一个正在使用的示例数据框
ID <- c("A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")
TARG_AVG <- c(2.1,2.1,2.1,2.1,2.1,2.1,2.3,2.3,2.5,2.5,2.5,2.5,3.1,3.1,3.1,3.1,3.3,3.3,3.3,3.3,3.5,3.5)
Measurement <- c("Len","Len","Len","Wid","Ht","Ht","Dep","Brt","Ht","Ht","Dep","Dep"
,"Dep","Dep","Len","Len","Ht","Ht","Brt","Brt","Wid","Wid")
df1 <- data.frame(ID,TARG_AVG,Measurement)
我在这里尝试解决 3 个不同的问题
1) 我想了解 (ID & TARG_AVG) 分组有多少唯一测量值。我目前正在这样做
unique <- summaryBy(Measurement~ID+TARG_AVG, data=df1, FUN=function(x) { c(Count=length(x)) } )
这给了我总数(measurement.count),但我也想要每次测量的计数。 我想要的输出是
ID TARG_AVG Len Wid Ht Dep Brt Measurement.Count
1 A 2.1 3 1 2 0 0 6
2 A 2.3 0 0 0 1 1 2
3 A 2.5 0 0 2 2 0 4
4 B 3.1 2 0 0 2 0 4
5 B 3.3 0 0 2 0 2 4
6 B 3.5 0 2 0 0 0 2
2) 获得上述输出后,我想对行进行子集化,以便获得过滤后的输出,该输出返回至少有 2 个测量计数 > 2 的行。这里 我想要的输出 将是
ID TARG_AVG Len Wid Ht Dep Brt Measurement.Count
1 A 2.1 3 1 2 0 0 6
3 A 2.5 0 0 2 2 0 4
4 B 3.1 2 0 0 2 0 4
5 B 3.3 0 0 2 0 2 4
3) 最后,我想将列转回到只有测量值> 2 的行。 我想要的输出是
ID TARG_AVG Measurement
1 A 2.1 Len
2 A 2.1 Len
3 A 2.1 Len
4 A 2.1 Ht
5 A 2.1 Ht
6 A 2.5 Ht
7 A 2.5 Ht
8 A 2.5 Dep
9 A 2.5 Dep
10 B 3.1 Len
11 B 3.1 Len
12 B 3.1 Dep
13 B 3.1 Dep
14 B 3.3 Ht
15 B 3.3 Ht
16 B 3.3 Brt
17 B 3.3 Brt
我目前正在学习 reshape2、dplyr 和 data.table 包,如果有人能通过为我指出正确的方向来帮助我解决这个问题,那将非常有用。
【问题讨论】:
标签: r data.table dplyr plyr reshape2