2014-06-13 2 views
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을 사용하여 하나의 변수에 대한 합계를 구할 수는 있지만 합계 5000 개를 얻으려면 for을 사용해야합니다. 정말 시간이 많이 걸리는 문제이므로 R에서 이러한 문제를 해결하는 명확한 방법이 있는지 또는 이런 종류의 문제를 해결할 패키지가 있는지 알고 싶습니다.정수형으로 합계를 적용한 후 R

이 더러운 코드와 df 인 반면 df0 내가 원하는 데이터입니다 :

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

감사합니다!

=====

덕분에, 롤랜드, 데모 데이터로 표시됩니다은 다음과 같습니다

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

이 매우 쉽고 매우 것 패키지 data.table로 효율적입니다. [재현 할 수있는 예제를 제공하십시오] (http://stackoverflow.com/a/5963610/1412059) 나는 당신에게 방법을 보여줄 것입니다. Btw. 당신은 루프에서 객체를 성장시키는 [추기경의 죄] (http://www.burns-stat.com/pages/Tutor/R_inferno.pdf)를 만들고 있습니다. – Roland

+0

@Roland 귀하의 제안에 대해 감사드립니다. 질문에 간단한 데이터를 시뮬레이션합니다. 'df0'는 100 by 3,'df'는 35 by 3이 될 것입니다. – yufree

답변

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 
+0

와우, 정말 빠릅니다! – yufree

+1

+1이지만, data.frame을 data.table로 변환하는 데는'setDT '를 사용하는 것이 바람직합니다. – Roland

관련 문제