我有一个数据框,我想根据三个不同列的信息创建另一个列。我正在使用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
非常感谢提前。
答案 0 :(得分:4)
如果结构保持不变
library(dplyr)
result <- df %>% group_by(Part, Item) %>% mutate(NewColumn = seq (0,4,2))
我按Item
和Part
进行分组,并创建一个计数为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