R

时间:2015-06-08 10:54:45

标签: r data.table

如何控制R?

中data.table中的行索引

我想检查一行中的值是否与前一个匹配:

patient    produkt    output
1          Meg        Initiation
1          Meg        Continue
1          Gem        Switch
2          Pol        Initiation
2          Pol        Continue
2          Pol        Continue

如果输出列是输出,我希望(如果initiation=0, continue=1, switch=2更容易,那么可以用数字替换。)

我无法找到如何控制data.table中的索引,以下内容不起作用

test[ , switcher2 := identical(produkt, produkt[-1]),by=patient]

欢迎任何想法。它必须在data.table中。

2 个答案:

答案 0 :(得分:4)

尝试使用devel version on GH

中的新validates_attachment :attach, :presence => true, :with => %r{\.(rar|tar|zip)$}i, :size => { :in => 0..10.kilobytes} 功能

我在这里使用了shift表示法,因为它写得比较短但你可以用词来代替

0:2

我基本上总是从每组test[ , output2 := c(0, (2:1)[(produkt == shift(produkt)) + 1][-1]), by = patient] # patient produkt output output2 # 1: 1 Meg Initiation 0 # 2: 1 Meg Continue 1 # 3: 1 Gem Switch 2 # 4: 2 Pol Initiation 0 # 5: 2 Pol Continue 1 # 6: 2 Pol Continue 1 开始,然后与每组的先前值进行比较。如果0,则分配TRUE。如果1,则分配FALSE

如果你想用文字,这里有另外的verison

2

安装说明:

test[ ,output3 := c("Initiation", c("Switch", "Continue")[(produkt == shift(produkt)) + 1][-1]), by = patient]

答案 1 :(得分:2)

这是使用diff的选项。我正在使用ifelse将整数值更改为字符。最后,对于每个组,第一个元素设置为初始值。

setDT(dx)[,output := {
   xx <- ifelse(c(0,diff(as.integer(factor(produkt))))<0,
                "Switch","Continue")
   xx <- as.character(xx)
   xx[1] <- "Initiation"
   xx
   },
patient]

#   patient produkt     output
# 1:       1     Meg Initiation
# 2:       1     Meg   Continue
# 3:       1     Gem     Switch
# 4:       2     Pol Initiation
# 5:       2     Pol   Continue
# 6:       2     Pol   Continue