按值筛选数据集并替换为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联接操作会附加列。试着检查一下为什么会有两个,然后看看是否可以删除其中一个。