2014-11-06 60 views
0

我有以下数据。R:列间计算

> dat<-read.csv("datafile.csv",sep=",") 
> dat 
     V1  V2  V4  V5 
1 908.1000 0.61884 2967.937 746.8904 
2 914.2944 0.60927 2665.044 691.8030 
3 920.4887 0.60038 2635.653 723.0173 
> 

我想计算V6如下: -

V6 =((V2-V5)/(V4-V5))* 100

但我不知道该怎么用R做这件事。 对不起,尝试使用像lapply这样的函数在某些线程中找到,但目前为止没有成功。 任何建议都非常受欢迎。

感谢, - 我们

+1

'transform(dat,V6 =((V2-V5)/(V4-V5))* 100)'应该可以工作 – 2014-11-06 13:14:16

+0

谢谢David。这解决了我的头痛。 – user4178184 2014-11-06 13:26:55

+0

查看我的'data.table'编辑,可以帮助您了解如何使用 – 2014-11-06 15:39:34

回答

2

试试这个

(dat <- transform(dat, V6 = ((V2-V5)/(V4-V5))*100)) 
#   V1  V2  V4  V5  V6 
# 1 908.1000 0.61884 2967.937 746.8904 -33.60000 
# 2 914.2944 0.60927 2665.044 691.8030 -35.02835 
# 3 920.4887 0.60038 2635.653 723.0173 -37.77075 

只是一般的知识,您可以通过修改对象参考使用data.table

library(data.table) 
(setDT(dat)[, V6 := ((V2-V5)/(V4-V5))*100]) 
#   V1  V2  V4  V5  V6 
# 1: 908.1000 0.61884 2967.937 746.8904 -33.60000 
# 2: 914.2944 0.60927 2665.044 691.8030 -35.02835 
# 3: 920.4887 0.60038 2635.653 723.0173 -37.77075 
(不产生不必要的副本)
2

Try:

> dat$V6 = with(dat, ((V2-V5)/(V4-V5))*100) 
> dat 
     V1  V2  V4  V5  V6 
1 908.1000 0.61884 2967.937 746.8904 -33.60000 
2 914.2944 0.60927 2665.044 691.8030 -35.02835 
3 920.4887 0.60038 2635.653 723.0173 -37.77075