这是表格:
Month D1 D2 D3 D4
1. 11149 10488 5593 3073
1. 6678 11073 789 10009
2. 2322 10899 3493 21
3. 5839 11563 4367 9987
我想将所有上述内容(4列距离乘以4行月份)划分为3组,并将每组的计数写成矩阵:
Month D<=700 700<D<1000 D>=1000
1. counts counts ....
2. ...
3. ....
最快的方法是什么?
谢谢!
答案 0 :(得分:2)
使用data.table
包的解决方案:
library(data.table)
library(magrittr)
setDT(dt)[, cut(colSums(.SD),breaks=c(0,700,1000,max(colSums(.SD)))) %>%
table %>%
as.list
, Month]
# Month (0,700] (700,1e+03] (1e+03,2.16e+04]
#1: 1 0 0 4
#2: 2 1 0 3
#3: 3 0 0 4
数据:强>
dt = structure(list(Month = c(1, 1, 2, 3), D1 = c(11149L, 6678L, 2322L,
5839L), D2 = c(10488L, 11073L, 10899L, 11563L), D3 = c(5593L,
789L, 3493L, 4367L), D4 = c(3073L, 10009L, 21L, 9987L)), .Names = c("Month",
"D1", "D2", "D3", "D4"), class = "data.frame", row.names = c(NA,
-4L))
答案 1 :(得分:1)
这不是最快的方式,但您可以使用melt()
中的cast()
和library(reshape)
:(假设d
是您原来的data.frame
)< / p>
library(reshape)
M <- melt(d,id.vars="month")
M$class <- cut(M$value,breaks=c(0,700,1000,max(M$value)))
C <- cast(M,month~class)