【发布时间】:2015-11-19 02:19:56
【问题描述】:
可能是基本的,但我正在用头撞墙。
假设我有这个数据表:
library(data.table)
df <- data.frame(DaystoPeak = c(2,NA,NA,NA,NA,NA,3,NA,NA,NA,NA,NA),
FlagPeak = c(0,0,1,0,0,0,0,0,0,1,0,0))
df <- data.table(df)
df
# DaystoPeak FlagPeak
#1: 2 0
#2: NA 0
#3: NA 1
#4: NA 0
#5: NA 0
#6: NA 0
#7: 3 0
#8: NA 0
#9: NA 0
#10: NA 1
#11: NA 0
#12: NA 0
基本上我想做的是生成第二列。 我正在尝试类似的东西:
df <- df[, FlagPeak := 0]
df <- df[, FlagPeak[.I+2] := ifelse(DaystoPeak == 2, 1, FlagPeak)]
但它不起作用......可能是循环引用问题或其他什么。我尝试了其他一些方法,但它们也不起作用:(
例如:
df <- df[, FlagPeak := ifelse(DaystoPeak == 2, c(0,0,1), FlagPeak)]
有人可以帮忙吗?
【问题讨论】:
-
在 RHS 上尝试
tail或head功能。 -
这样吗?
flag <- rep(0, nrow(df)); flag[which(!is.na(df$DaystoPeak)) + na.omit(df$DaystoPeak)] <- 1 -
@rawr 谢谢你,效果很好!我想我也明白了。我对这一切都很陌生,所以接触这些东西是有帮助的。非常感谢!
-
或在
data.table中发言 -df[which(!is.na(DaystoPeak)) + na.omit(DaystoPeak), FlagPeak := 1]- 顺便说一句,使用:=时,您不需要像df <- ...那样重新分配 - 它通过引用更新。 -
我会做
w = which(!is.na(df$DaystoPeak)); df[w+DaystoPeak[w], FlagPeak := 1L]。有一个针对FlagPeak[.I+2] :=等语法的开放功能请求,我也希望看到。
标签: r indexing data.table