按值筛选数据集并替换为R中其他数据集中的值

按值筛选数据集并替换为R中其他数据集中的值,r,dataframe,subset,R,Dataframe,Subset,我有两个这样的数据集: >data1 id l_eng l_ups 1 6385 239 2 680 0 3 3165 0 4 17941 440 5 135 25 6 151 96 7 102188 84 8 440 65 9 6613 408 >data2 id l_ups 1 237 2 549 3 100 4 444 5 28 6 101 7 2

我有两个这样的数据集:

>data1
id  l_eng   l_ups
1   6385    239
2   680     0
3   3165    0
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408

>data2
id  l_ups
1   237
2   549 
3   100
4   444
5   28
6   101
7   229
8   92
9   47
id  l_eng   l_ups
1   6385    239
2   680     549
3   3165    100
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408
>if(data1[,3]==0)
TRUE TRUE
我想从data1中筛选出值,其中
l\u ups==0
,并使用id作为r中的查找值替换为data2中的值

最终输出应如下所示:

>data1
id  l_eng   l_ups
1   6385    239
2   680     0
3   3165    0
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408

>data2
id  l_ups
1   237
2   549 
3   100
4   444
5   28
6   101
7   229
8   92
9   47
id  l_eng   l_ups
1   6385    239
2   680     549
3   3165    100
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408
>if(data1[,3]==0)
TRUE TRUE
我尝试了下面的代码,但没有成功

if(data1[,3]==0)
{
filter(data1, last_90_uploads == 0) %>%
merge(data_2, by.x = c("id", "l_ups"),
    by.y = c("id", "l_ups")) %>%
select(-l_ups)
}
我不能通过
if
语句得到这个值,因为它只接受一个值作为逻辑条件。但是,如果我有多个值作为逻辑语句呢? 像这样:

>data1
id  l_eng   l_ups
1   6385    239
2   680     0
3   3165    0
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408

>data2
id  l_ups
1   237
2   549 
3   100
4   444
5   28
6   101
7   229
8   92
9   47
id  l_eng   l_ups
1   6385    239
2   680     549
3   3165    100
4   17941   440
5   135     25
6   151     96
7   102188  84
8   440     65
9   6613    408
>if(data1[,3]==0)
TRUE TRUE
编辑:
我想用条件过滤这些值,并用另一个数据集中的值替换它们。因此,此问题与建议的重复问题不同。

您不想筛选
filter
是一种返回可能已删除行的数据集的操作

您正在寻找“条件更新”操作(就数据库而言)。您已经在使用dplyr,请尝试联接操作而不是匹配:

left_join(data1, data2, by='id') %>%
  mutate(l_ups = ifelse(!is.na(l_ups.x) || l_ups.x == 0, l_ups.y, l_ups.x))
通过使用联接操作而不是@markus建议的直接子集比较,可以确保只比较具有相同ID的值。如果您的一个数据帧恰好丢失了一行,则直接子集比较将失败。
通过使用
left_-join
而不是
internal_-join
也可以确保如果
data2
缺少一个id,相应的id不会从
data1

中删除,请投票支持解释,但是。@MrGumble Hi!谢谢你的代码和解释。我试过你的代码。它工作正常,但在联接后,它也将l_ups.y的列合并到数据集中。@LAXMINARASIMHAACHARYA联接操作会附加列。试着检查一下为什么会有两个,然后看看是否可以删除其中一个。