首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R中的公式添加新列的最佳方法

使用R中的公式添加新列的最佳方法
EN

Stack Overflow用户
提问于 2015-10-29 06:11:12
回答 2查看 290关注 0票数 0

我有一个数据帧,其中有一列类别和一列值(假设是"v")。我需要用下列值创建一个新列:v- min(v) / min(v)。例如:

代码语言:javascript
复制
Cat 1  |  Value
A      |   1
A      |   3
B      |   2
B      |   1

必须是:

代码语言:javascript
复制
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

我使用了以下代码:

代码语言:javascript
复制
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

但它需要几个小时才能跑完。有没有最快的方法呢?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-10-29 06:20:41

您可以使用dplyr

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-10-29 06:30:46

可以将data.table包与每个组的内联定义一起使用,如下所示

代码语言:javascript
复制
library('data.table')
DT <- DT[,
         new := (Value - min(Value))/min(Value),
         by = 'Cat_1'
         ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33402490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档