将每列除以R中的上一列

时间:2015-05-27 21:13:41

标签: r

我有以下数据框:

df <- data.frame(type = c("planes", "trains", "automobiles"), t1 = c(4, 5, 6), t2 = c(20, 60, 24), t3 = c(100, 120, 72), t4 = c(800, 360, 144))

 df
         type t1 t2  t3  t4
1      planes  4 20 100 800
2      trains  5 60 120 360
3 automobiles  6 24  72 144

我想写一个函数,它接受每列中的值并将它们除以前一列,从t2 / t1开始,这样我得到一个如下所示的新数据框:

new_df
         type t1 t2 t3 t4
1      planes     5  5  8
2      trains    12  2  3
3 automobiles     4  3  2

使用扫描功能可能有办法实现这一点,但我还没有找到它。

提前致谢!

2 个答案:

答案 0 :(得分:5)

$scope.user = Authentication._data.user;//the token object data NOT here

df[, 3:5] <- df[, 3:5] / df[, 2:4] # type t1 t2 t3 t4 # 1 planes 4 5 5 8 # 2 trains 5 12 2 3 # 3 automobiles 6 4 3 2 也可以使用

Map

答案 1 :(得分:3)

也许更一般地说:

func <- function(x) {
    numcols <- ! sapply(x, class) %in% c('character','factor')
    nc <- sum(numcols)
    if (nc > 1) {
        m <- x[,numcols]
        x[,numcols] <- m[,2:nc] / m[,1:(nc-1)]
    }
    x
}
func(df)
##          type t1 t2 t3 t4
## 1      planes  5  5  8  5
## 2      trains 12  2  3 12
## 3 automobiles  4  3  2  4

您可能希望在分母中添加零保护措施,除以FALSE(同样的事情),以及其他此类角落案例。