我有一个数据框,我想根据以下条件添加一行。条件是column a等于Ccolumn b等于35时。

这是我的数据框

df <- data.frame(a = c("A", "B", "C", "D", "C", "A", "C", "E"),
                 b = c(seq(8)), stringsAsFactors = TRUE)


每当条件为TRUE时,我要在满足条件add 3的下方添加一行。我尝试了以下

rbind(df, data.frame(a="add", b = "3"))
#     a b
# 1   A 1
# 2   B 2
# 3   C 3
# 4   D 4
# 5   C 5
# 6   A 6
# 7   C 7
# 8   E 8
# 9 add 3


这不是我想要的输出。我想要的输出是

#     a b
# 1   A 1
# 2   B 2
# 3   C 3
# 4 add 3
# 5   D 4
# 6   C 5
# 7 add 3
# 8   A 6
# 9   C 7
# 10  E 8


我怎样才能做到这一点?我是R的新手,感谢您的帮助。

最佳答案

在基数R中,我们可以找出a = "c"b为3或5的位置。在数据框中重复这些行,并将其替换为所需的值。

pos <- which(df$a == "C" & df$b %in% c(3, 5))
df <- df[sort(c(seq(nrow(df)), pos)), ]
df[seq_along(pos) + pos, ] <- list("add", 3)
row.names(df) <- NULL

df
#     a b
#1    A 1
#2    B 2
#3    C 3
#4  add 3
#5    D 4
#6    C 5
#7  add 3
#8    A 6
#9    C 7
#10   E 8


数据

df <- data.frame(a = c("A", "B", "C", "D", "C", "A", "C", "E"),
                 b = c(seq(8)), stringsAsFactors = FALSE)

10-07 19:19
查看更多