我想在数据框中添加一列(让我们调用数据框“df”)。如上所示,我希望新列(df $ X3,下面)从1开始,当填充X2 时增加1,>>填充X1 [前一行]时。我找到了一些类似的例子,但是不太可能得到这个例子。任何帮助表示赞赏。
谢谢!
DF:
combinedArrays.Select(items => new {Id = items.Item0, Name = items.Item1 });
答案 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")