1

这是我的问题:我得到了 3000 obs 的数据。和 5000 个功能,3000 个 obs。有一个像 100.1,100.3,100.5,100.7 这样的数字名称。我将名称更改为整数变量segs <-as.integer(names),然后我想将其segs用作对所有 3000 个特征求和的因素。的长度segs是 300,所以最终的数据帧是 300 x 5000。我知道tapply可以用来按因子计算一个变量的总和,但我必须用它for来对所有 5000 个特征求和。这真的很耗时,所以我想知道R中是否有明确的方法来解决这些问题,或者是否有一些包可以解决这类问题。

这是脏代码,是我想要df0的数据:df

df <- data.frame()
 for(i in 2:ncol(df0)-1){
    temp <- tapply(df0[,i],df2$segs,sum)
    df <- cbind(df,temp)
}

谢谢!

=====

谢谢,Roland,演示数据如下所示:

set.seed(42)    
df0 <- data.frame(
X = rnorm(100,10,10),
Y = rnorm(100), 
Z = rnorm(100))
df0$seq <- as.integer(df0$X)
4

1 回答 1

2

尝试这个...

set.seed(42)    
df0 <- data.frame(
    X = rnorm(100,10,10),
    Y = rnorm(100), 
    Z = rnorm(100))
df0$seq <- as.integer(df0$X)

library(data.table)
dt = data.table(df0)
dt[,lapply(.SD, sum), by=seq ]

    seq           X            Y           Z
 1:  23 164.8144774  1.293768670 -3.74807730
 2:   4   8.9247301  1.909529066 -0.06277254
 3:  13  40.2090180 -2.036599633  0.88836392
 4:  16 147.8571697 -2.571487358 -1.35542918
 5:  14  72.1640142  0.432493959 -1.49983832
 6:   8  42.8498355 -0.582031919 -1.35989852
 7:  25  75.9995653  0.896369560 -1.08024329
 8:   9  27.5244048  0.833429855 -1.19363017
 9:  30  30.1842371  0.188193035 -0.64574372
10:  32  32.8664539  0.108072728  2.03697217
11:  -3  -7.5714175 -0.899304085 -1.27286230
12:   7  29.6254908 -0.929790177  2.75906514

27:  12  50.2535374 -0.620793351 -3.80900436
28:  24  24.4410126 -0.433169033 -0.02671746
29: -19 -19.9309008 -0.533492330 -1.01759612
30:  11  11.8523056 -1.071782384  0.96954501
31:  19  38.5407490 -0.751408534 -4.81312992
32:   0  -0.9642319  1.453325156  2.20977601
33:  -1  -4.3685646 -0.834654913 -0.24624546
34:  18  18.2177311 -1.594588162  0.27369527
35:  -4  -4.5921400  0.586487537  0.86256338
于 2014-06-13T07:52:36.437 回答