我有一个数据集,我将其导入R作为data.table。其中一列是以分钟为单位的持续时间x(整数),如果x介于0和60之间(包括0),我想要一个60-x的新列,否则为0。我做到了这一点,但不是很优雅,我想知道最R的方式。
library(data.table)
dt <- data.table(x = c(60, 5, 0, 61, 47, 75))
defecit <- function(x){
if(x>0 & x<60)
{
60-x
}
else{0}
}
dataset$y = unlist(sapply(dataset$x,defecit))
答案 0 :(得分:3)
我们可以用
来做到这一点$example = explode(" ", $url);
echo $example[0];
如果包含负数,则
dt[, x1 := pmax(60-x, 0)]
dt
# x x1
#1: 60 0
#2: 5 55
#3: 0 60
#4: 61 0
#5: 47 13
#6: 75 0
或者@Frank在评论中提到
dt[, x1 := 60 - x][x > 60 | x < 0, x1 := 0][]
dt[, y := (60-x)*between(x,0,60)][]