2013-08-14 5 views
0

У меня есть кадр данныхR: один столбец данных манипуляция конкретные данные

x <- data.frame(id=letters[1:3],val0=c(100,200,300),val1=c(400,500,600),val2=c(700,800,900)) 

Я хочу, чтобы разделить нечетные столбцы с конкретным номером n1 (скажем) и четных столбцов с другим номером n2 (скажем). Итак, в результате я хочу:

>n1<-2 
>n2<-5 

id val0 val1 val2 
a  50  80  350 
b  100  100 400 
c  150  120 450 

Может кто-нибудь предложить мне, как это сделать?

Спасибо.

ответ

1

Вы можете использовать функцию seq() для генерации значений для номеров столбцов, а затем подмножество этих столбцов. Ибо колонны начинаются с 2 и нечетной звездой с 3. Затем заменить выбранные столбцы с одинаковыми выбранными столбцами, поделенных на числе вы заинтересованы в

x[,seq(2,ncol(x),2)]<-x[,seq(2,ncol(x),2)]/n1 
x[,seq(3,ncol(x),2)]<-x[,seq(3,ncol(x),2)]/n2 
0

слегка замаскированные for цикла:.

x[] <- lapply(seq_len(ncol(x)), function(i) x[, i]/ifelse(i%%2, 2, 5)) 

И только для пинок:

x[] <- lapply(seq_len(ncol(x)), function(i) x[, i]/if(i%%2) 2 else 5) 
Смежные вопросы