在R中添加公式的新列的最佳方法

时间:2015-10-28 22:11:12

标签: r

我有一个包含一列类别和一列有价值的数据框(让我们说" v")。我需要创建一个具有以下值的新列:v - min(v)/ min(v)。例如:

Cat 1  |  Value
A      |   1
A      |   3
B      |   2
B      |   1

必须:

Cat 1  |  Value   | NewCol
A      |   1      | (1-1)/1 = 0
A      |   3      | (3-1)/1 = 2
B      |   4      | (4-2)/2 = 1
B      |   2      | (2-2)/2 = 0

我使用以下代码:

for (i in unique(fullDataset$Cat)) {
    fullDataset[which(fullDataset$Cat==i),"NewCol"] = min(fullDataset[which(fullDataset$Cat==i),"Value"])
}
fullDataset$NewCol <- (fullDataset$Value - fullDataset$NewCol) / fullDataset$NewCol

但它需要花费数小时才能运行......有最快的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr

library(dplyr)
fullDataset %>% group_by(Cat) %>%
                mutate(newcol = (Value - min(Value))/min(Value))


Source: local data frame [4 x 3]
Groups: Cat [2]
     Cat Value newcol
  (fctr) (int)  (int)
1      A     1      0
2      A     3      2
3      B     4      1
4      B     2      0

首先,我们按Cat分组,然后mutate分组新列newcol,即值,减去min值,除以最小值。

答案 1 :(得分:1)

您可以将data.table包与每组的内联定义一起用作

library('data.table')
DT <- DT[,
         new := (Value - min(Value))/min(Value),
         by = 'Cat_1'
         ]