【发布时间】:2018-09-20 01:32:54
【问题描述】:
我有两个数据框:
df1<-data.frame(ID = c(1,1,2,3,3,4,5,6),
week = c(20,23,10,15,20,40,10,12),
var1 = rep(1, 8))
df2<-data.frame(ID=c(1,1,1,2,2,3,5),
week = c(18,19,22,8,9,14,9),
var1= rep(0,7))
我想将它们与以下条件结合起来:
1. Keep all of df1
2. Only add the rows from df2 where the df2$week = df1$week-1
输出如下所示:
ID week var1
1 1 19 0
2 1 20 1
3 1 22 0
4 1 23 1
5 2 9 0
6 2 10 1
7 3 14 0
8 3 15 1
9 5 9 0
10 5 10 1
11 6 12 1
这是上一个问题的变体,该问题询问如何在一个条件下保持一行,在另一个条件下保持其上方的行。我已经将数据子集到两个数据帧中,假设有条件地绑定它们可能更容易。我试过了:
df3<-rbind.data.frame(ifelse(df2$ID==df1$ID & df2$week==df2$week-1, df1, df2))
但我收到一条错误消息:
longer object length is not a multiple of shorter object length.
我觉得这非常接近获得我想要的输出,但我对 rbind 不是很有经验。谢谢!
【问题讨论】:
-
这个问题和你之前的问题有什么不同? stackoverflow.com/questions/52397798/…
-
在上一个问题中,所有数据都在一个数据框中,我想提取所有 var1=1 的行,只有当 week= week-1 时才提取它上面的行。我想将数据一分为二,然后仅添加 df2 中满足条件的行,而不是尝试根据多个条件提取行,这可能更容易。
-
代替
==尝试%in%和&amp;&amp;代替&&