使用基于其他三列的值的总和创建一个新列

时间:2015-04-07 13:29:52

标签: r

我有一个数据框,我想根据三个不同列的信息创建另一个列。我正在使用R.

我想开始指望0,并根据列Time和on Item and Participants信息在每个新单元格中添加2。我希望每个参与者的每个项目的时间计数开始时为0(以ms为单位)。

df <- data.frame(Item=c(1,1,1,1,1,1,2,2,2,2,2,2),  
             Part=c(1,1,1,2,2,2,1,1,1,2,2,2), 
            Time=c(1234,1235,1236,345,346,347,1546,1547,1548,234,235,236))

   Item Part Time
1     1    1 1234
2     1    1 1235
3     1    1 1236
4     1    2  345
5     1    2  346
6     1    2  347
7     2    1 1546
8     2    1 1547
9     2    1 1548
10    2    2  234
11    2    2  235
12    2    2  236

使用新列,表格将类似于:

   Item Part Time NewColumn
1     1    1 1234         0
2     1    1 1235         2
3     1    1 1236         4
4     1    2  345         0
5     1    2  346         2
6     1    2  347         4
7     2    1 1546         0
8     2    1 1547         2
9     2    1 1548         4
10    2    2  234         0
11    2    2  235         2
12    2    2  236         4

非常感谢提前。

4 个答案:

答案 0 :(得分:4)

如果结构保持不变

library(dplyr)
result <- df %>% group_by(Part, Item) %>% mutate(NewColumn = seq (0,4,2))

我按ItemPart进行分组,并创建一个计数为0,2,4的新列

   Item Part Time NewColumn
1     1    1 1234         0
2     1    1 1235         2
3     1    1 1236         4
4     1    2  345         0
5     1    2  346         2
6     1    2  347         4
7     2    1 1546         0
8     2    1 1547         2
9     2    1 1548         4
10    2    2  234         0
11    2    2  235         2
12    2    2  236         4

为了更灵活(如果每组有超过3行),可以使用

result <- df %>% group_by(Part, Item) %>% mutate(NewColumn = 2* (row_number()-1))

将生成序列0,2,4,6,8 ......

中的数字

答案 1 :(得分:2)

library(data.table)
df <- data.table(df)
df[, NewCol := seq(0,nrow(df),2), by=list(Item,Part)]

答案 2 :(得分:1)

呃... df = cbind(df,NewColumn=c(0,2,4))

答案 3 :(得分:1)

+1库(plyr)

    library(plyr)
    ddply(df, c("Item","Part"), mutate,NewColumn = seq(0,4,2))



    Item Part   Time NewColumn
     1    1     1234    0
     1    1     1235    2
     1    1     1236    4
     1    2     345     0
     1    2     346     2
     1    2     347     4
     2    1     1546    0
     2    1     1547    2
     2    1     1548    4
     2    2     234     0
     2    2     235     2
     2    2     236     4