如何建立自动划分列值?

时间:2018-06-18 20:19:21

标签: r dataframe

我有一些具有不同ncol的数据帧。我想用来自第二列的特定规则替换该值,此列中的值应该是原始值除以它之前的值。例如:

df= data.frame(rep(60,3),c(40:42),c(30:32),c(1:3))
colnames(df) <- c(1,2,3,4)
> df
  1  2  3  4
1 60 40 30 1
2 60 41 31 2
3 60 42 32 3
#rule:all the first column should divide 100, the second col divide first col
#     the third col divide second col and so on.
#ideal result 
  1    2      3     4 
1 0.6 0.667 0.75  0.033
2 0.6 0.683 0.756 0.065 
3 0.6 0.7   0.762 0.094
#the only idea I got now is that use Map and manual replace it
u1<-df$'1'/100
u2<-Map("/",df$`2`,df$`1`)
...
allu <- dataframe(u1,u2,...)

是否有可能使用不同的ncol自动执行此操作?提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

我们可以删除第一列(df[-1])和最后一列(df[-ncol(df)]),除以它以便我们划分备用列,然后cbind除以第一列除以100

cbind(df[1]/100, df[-1]/df[-ncol(df)])
#    1         2         3          4
#1 0.6 0.6666667 0.7500000 0.03333333
#2 0.6 0.6833333 0.7560976 0.06451613
#3 0.6 0.7000000 0.7619048 0.09375000