2016-08-03 37 views
0

我已经为只有三列的数据帧做了这些。我想通过“c”变量来分割所有变量。创建一个新的变量,将数据帧的所有变量除以每一行中的相同变量 - R

> d <- data.frame(rep(2,7),rep(4,7),rep(8,7)) 
> colnames(d) <- c("a","b","c") 
> #Creating the new variables 
> d$c1 <- d$a/d$b 
> d$c2 <- d$a/d$c 
> d 
    a b c c1 c2 
1 2 4 8 0.5 0.25 
2 2 4 8 0.5 0.25 
3 2 4 8 0.5 0.25 
4 2 4 8 0.5 0.25 
5 2 4 8 0.5 0.25 
6 2 4 8 0.5 0.25 
7 2 4 8 0.5 0.25 

但是,如果什么数据帧有一个以上的百柱,如何设置一个循环或某事与家人申请来创建新的变量?

回答

2

我认为你不需要*apply或循环。尝试:

cbind(d, d[, 1]/d[, -1]) 

但是你需要设置列名到你想要的。

d <- setNames(data.frame(rep(2,7),rep(4,7),rep(8,7)), letters[1:3]) 
cbind(d, d[, 1]/d[, -1]) 
# a b c b c 
#1 2 4 8 0.5 0.25 
#2 2 4 8 0.5 0.25 
#3 2 4 8 0.5 0.25 
#4 2 4 8 0.5 0.25 
#5 2 4 8 0.5 0.25 
#6 2 4 8 0.5 0.25 
#7 2 4 8 0.5 0.25 
+0

谢谢,我刚刚尝试过,它比我想象的要容易得多。 – CreamStat

相关问题