2011-10-13 134 views
1

從其他塔計算一列的值有關數據幀AB:創建循環函數中的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$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]) 
     } 
} 

這樣我就可以在必要時改變分子/分母。

+0

這是無稽之談這裏寫一個函數,因爲你不需要任何環路 - 只寫'AB $ DE = AB $ B/AB $ A'(或更好的'AB $ dE <-AB $ B/AB $ A')。 – mbq

回答

2

你並不需要一個循環,因爲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只是一個列表(假設nume和DENOM是你想要的列名)特徵向量:

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