Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中按键的数据表的条件和_R_Sum_Data.table - Fatal编程技术网

R中按键的数据表的条件和

R中按键的数据表的条件和,r,sum,data.table,R,Sum,Data.table,我有一个数据表'df',有3列。身份证、膳食、时间 每个id有许多行 library(data.table) id = c(1,1,2,2,3,3) meal = c(1,1,0,0,1,0) time = c(10,9,12,13,7,15) df <- data.table(id, meal, time) > df id meal time 1: 1 1 10 2: 1 1 9 3: 2 0 12 4: 2 0 13 5:

我有一个数据表'df',有3列。身份证、膳食、时间 每个id有许多行

library(data.table)
id = c(1,1,2,2,3,3)
meal = c(1,1,0,0,1,0)
time = c(10,9,12,13,7,15)
df <- data.table(id, meal, time)

> df
   id meal time
1:  1    1   10
2:  1    1    9
3:  2    0   12
4:  2    0   13
5:  3    1    7
6:  3    0   15

我能做什么?

您可以尝试以下方法:

df[, is.meal.one := as.integer(meal == 1)]
df[, sum(time * is.meal.one), by = "id"]
这个怎么样

library(data.table)

dt <- data.table(
  id = c(1, 1, 2, 2, 3, 3),
  meal = c(1, 5, 3, 2, 10, 1),
  time = c(2, 10, 15, 5, 5, 2)
)

   id meal time
1:  1    1    2
2:  1    5   10
3:  2    3   15
4:  2    2    5
5:  3   10    5
6:  3    1    2

dt[, list(Meal1Time = sum(time[which(meal == 1)])), by=id]
   id Meal1Time
1:  1         2
2:  2         0
3:  3         2
库(data.table)

在你的问题中加入a会增加你得到答案的机会。你可以在计算完总数后进行合并。您可以使用
ifelse
如果您想要解决方案,请不要忘记将其标记为“正确”。
library(data.table)

dt <- data.table(
  id = c(1, 1, 2, 2, 3, 3),
  meal = c(1, 5, 3, 2, 10, 1),
  time = c(2, 10, 15, 5, 5, 2)
)

   id meal time
1:  1    1    2
2:  1    5   10
3:  2    3   15
4:  2    2    5
5:  3   10    5
6:  3    1    2

dt[, list(Meal1Time = sum(time[which(meal == 1)])), by=id]
   id Meal1Time
1:  1         2
2:  2         0
3:  3         2