创建基于R中的行序列递增的新列

时间:2015-11-13 18:01:44

标签: r

我想在数据框中添加一列(让我们调用数据框“df”)。如上所示,我希望新列(df $ X3,下面)从1开始,当填充X2 时增加1,>填充X1 [前一行]时。我找到了一些类似的例子,但是不太可能得到这个例子。任何帮助表示赞赏。

谢谢!

DF:

combinedArrays.Select(items => new {Id = items.Item0, Name = items.Item1 });

1 个答案:

答案 0 :(得分:0)

我们可以使用data.table。我们将'data.frame'转换为'data.table'(setDT(df1)),检查'X2'中的空白元素以获取逻辑向量,获取差异,转换为逻辑向量(< 0)并获得cumsum

library(data.table)
setDT(df1)[, X3 := cumsum(c(TRUE, diff(X2=='')<0))]
df1
#    X1 X2 X3
# 1:     A  1
# 2:     G  1
# 3:     B  1
# 4:  X     1
# 5:  Y     1
# 6:  Z     1
# 7:     E  2
# 8:     U  2
# 9:  A     2
#10:  C     2
#11:  E     2
#12:     A  3
#13:     A  3
#14:     A  3
#15:     A  3
#16:  C     3
#17:  E     3

如果'X1'和'X2'在同一行中都有'',我们还需要X3 ''

 setDT(df1)[, X3 := as.character(cumsum(c(TRUE, diff(X2=='')<0)))
      ][X1=='' & X2=='', X3 := '']

数据

df1 <- structure(list(X1 = c("", "", "", "X", "Y", "Z", "", "", "A", 
"C", "E", "", "", "", "", "C", "E"), X2 = c("A", "G", "B", "", 
"", "", "E", "U", "", "", "", "A", "A", "A", "A", "", "")),
.Names = c("X1", 
"X2"), row.names = c(NA, -17L), class = "data.frame")