我想使用自己的元素的重复项,但要在特定条件下扩展数据框。
这是我的示例数据:
x1 <- c(1, 2, 3, 4, 5)
x2 <- c(2, 2, 2, 2, 2)
y1 <- c(9, 9, 8, 9, 9)
y2 <- c(0, 0, 0, 1, 1)
df <- data.frame(x1, x2, y1, y2)
df
x1 x2 y1 y2
1 1 2 9 0
2 2 2 9 0
3 3 2 8 0
4 4 2 9 1
5 5 2 9 1
条件:仅当y1 = 9和y2 = 0时重复。因此输出应如下所示:
x1 x2 y1 y2
1 1 2 9 0
2 2 2 9 0
3 3 2 8 0
4 4 2 9 1
5 5 2 9 1
6 1 2 9 0
7 2 2 9 0
案例1和2被复制,因此数据帧被扩展(新的行6和7)。情况3、4和5被忽略,不满足条件。
感谢您的帮助。
答案 0 :(得分:2)
我们可以使用which
来获得满足条件的行的行索引,而仅将rbind
的行一起添加到原始数据帧中即可。
inds <- which(df$y1 == 9 & df$y2 == 0)
rbind(df, df[inds,])
# x1 x2 y1 y2
#1 1 2 9 0
#2 2 2 9 0
#3 3 2 8 0
#4 4 2 9 1
#5 5 2 9 1
#6 1 2 9 0
#7 2 2 9 0
或使用dplyr
bind_rows
library(dplyr)
bind_rows(df,
df %>%
filter(y1 == 9 & y2 == 0))
如果我们想将y1
的重复行的值更改为10,我们可以这样做
bind_rows(df,
df %>%
filter(y1 == 9 & y2 == 0) %>%
mutate(y1 = 10)
)
# x1 x2 y1 y2
#1 1 2 9 0
#2 2 2 9 0
#3 3 2 8 0
#4 4 2 9 1
#5 5 2 9 1
#6 1 2 10 0
#7 2 2 10 0