создать функцию цикла для вычисления значения одного столбца из другого столбца в R - PullRequest
1 голос
/ 13 октября 2011

Для на фрейме данных AB:

AB<-data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0))

Я хотел бы применить следующую формулу: AB$dE=AB$B/AB$A

ID A  B  dE
1  2  6  0
2  8  2  0
4  8  2  0

для преобразования вышеупомянутого в:

ID A  B  dE
1  2  6  3
2  8  2  0.25
4  8  2  4

, поскольку у меня есть несколько файлов, которые содержат разные имена столбцов для A и B, было бы более практично написать функцию, что-то вроде

dEs <- function(data,nume,denom){ 
        #define which datafile and numerator/denom column
        #so in case of AB this becomes AB$dE; 
        # i dont know the correct way to do this.
        dE=data.'$dE'
        start=data.'$'.nume #to become AB$A
        end=data.'$'.denom #to become AB$B
        for(i in data){
          dE[i] <- (start[i]/end[i])
        }
}

Таким образом, я смогу изменить числитель / знаменатель при необходимости.

1 Ответ

2 голосов
/ 13 октября 2011

Вам не нужен цикл, так как R векторизован:

> AB <- data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0))
> AB <- transform(AB, dE=B/A)
> AB
  ID A B   dE
1  1 2 6 3.00
2  2 8 2 0.25
3  4 8 2 0.25

Если вам действительно нужна функция, вы можете использовать [[]] для выбора столбцов, поскольку data.frame - это простосписок (при условии, что число и число являются символьными векторами с именем нужного столбца):

dEs <- function(data,nume,denom){ 
  data$dE <- data[[nume]] / data[[denom]]
}
...