如果R中的语句使用表

时间:2016-01-08 10:05:54

标签: r

我想根据表格不同部分的数据在表格中创建一个新列。我的桌子是

SeqNr Length SerieNr
1     0      0
2     0      0
3     3      1
1     0      0
2     2      2
1     1      3
1     0      0
2     0      0
3     3      4
1   

我有一个表格,每个角色描述一个事件。有时这些事件是序列的一部分。我已确定第二列中序列的长度。现在我想添加第三列SerieNr,为每个系列添加一个序号。

在excel中,列SerieNr的公式(假设这些列是A,B,C)将是:

=if(b1=0;0;max($A$1:A1)+1)

检查列Length是否为非零。如果这是true,那么它会在列SerieNr中占用最大数量并添加1.

我如何在R中实现同样的目标?

3 个答案:

答案 0 :(得分:1)

DF <- read.table(text = "SeqNr Length SerieNr
                 1     0      0
                 2     0      0
                 3     3      1
                 1     0      0
                 2     2      2
                 1     1      3
                 1     0      0
                 2     0      0
                 3     3      4", header = TRUE)

DF$SeqNr2 <- 0
#subset and create a sequence along the subset
DF[DF$Length != 0, "SeqNr2"] <- seq_along(DF[DF$Length != 0, "SeqNr2"])
#  SeqNr Length SerieNr SeqNr2
#1     1      0       0      0
#2     2      0       0      0
#3     3      3       1      1
#4     1      0       0      0
#5     2      2       2      2
#6     1      1       3      3
#7     1      0       0      0
#8     2      0       0      0
#9     3      3       4      4

答案 1 :(得分:1)

另一种基础R单线方法:

df$SerieNr = ifelse(df$Length, cumsum(df$Length!=0), 0)

#> df
#  SeqNr Length SerieNr
#1     1      0       0
#2     2      0       0
#3     3      3       1
#4     1      0       0
#5     2      2       2
#6     1      1       3
#7     1      0       0
#8     2      0       0
#9     3      3       4

答案 2 :(得分:0)

我们可以使用library(data.table) setDT(dfN)[Length!=0, SerialNr2:= seq_len(.N)]

NA

以上内容将填充&#34; SerialNr2&#34;中的dfN[is.na(SerialNr2), SerialNr2:= 0] dfN # SeqNr Length SerieNr SerialNr2 #1: 1 0 0 0 #2: 2 0 0 0 #3: 3 3 1 1 #4: 1 0 0 0 #5: 2 2 2 2 #6: 1 1 3 3 #7: 1 0 0 0 #8: 2 0 0 0 #9: 3 3 4 4 值。对于&#34;长度&#34;中的相应0值。如果需要,可以将其更改为0

{
    "query": {
        "match":{
            "address": "100 Broadway"
         }
      }
}