2013-10-15 3 views
4

Я новичок в R, поэтому этот вопрос может быть очень прост для многих из вас. У меня есть фрейм данных с 1000 столбцов и 1000 строк, немного как следованиерассчитывать коэффициенты для каждых 2 столбцов в кадре данных

id S1 S2 S3 S4 S5 S6 
A1 2 7 9 56 34 23 
A2 3 5 11 4 8 56 
A3 8 22 32 45 67 76 
A4 4 21 23 1 34 43 
A5 6 12 5 19 36 46 
A6 45 89 76 87 75 78 
A7 45 71 56 65 34 87 
A8 26 76 67 87 65 65 

Я хотел бы получить соотношение колонок 1/2, 3/4 колонки, ... колонок 999/1000, а затем положить в матрицу. Я попытался использовать «для», чтобы сделать это, но так и не удалось. Кто-нибудь может помочь мне в этом? Спасибо.

+2

Можете ли вы поделиться тем, что вы пытались с вашими ' for' loop? – A5C1D2H2I1M1N2O1R2T1

+0

Извините, кадр данных выглядит так: –

+0

Возможно, вам захочется подумать о том, что произойдет, если у вас есть нечетное количество столбцов. –

ответ

8

Нет необходимости использовать for, использовать seq для создания индекса для выбора столбцов в числителе и знаменателе

> num <- seq(2,ncol(df),2) # index for numerator 
> dem <- seq(3,ncol(df),2) # index for denominator 
> df[, num]/df[, dem] 
     S1   S3  S5 
1 0.2857143 0.1607143 1.4782609 
2 0.6000000 2.7500000 0.1428571 
3 0.3636364 0.7111111 0.8815789 
4 0.1904762 23.0000000 0.7906977 
5 0.5000000 0.2631579 0.7826087 
6 0.5056180 0.8735632 0.9615385 
7 0.6338028 0.8615385 0.3908046 
8 0.3421053 0.7701149 1.0000000 

Все в одном кадре: df[,seq(2,ncol(df),2)]/df[, seq(3,ncol(df),2)]

+1

Хороший подход. +1 – A5C1D2H2I1M1N2O1R2T1

+0

+1 Я вижу, что я в основном делал то же самое, что и вы. Но разве вы не хотите, чтобы ваш 'dem' начинался с' 1'? –

+1

нет, потому что первый столбец 'df' не является числовым, это фактор-переменная, поэтому я исключаю col1. –

Смежные вопросы