R语言 筛选+匹配
Posted 基督徒Isaac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言 筛选+匹配相关的知识,希望对你有一定的参考价值。
背景:如何匹配向量来筛选,而不是一个一个地使用“或”字符
解决方案:使用%in%替代
library(tidyverse)
A <- data.frame(a = 1:5, b = 2:6); A
B <- c(2, 4, 5); B
# 请问,如何筛选出a == B?
filter(A, a == B) # In a == B : 长的对象长度不是短的对象长度的整倍数
subset(A, a == B) # In a == B : 长的对象长度不是短的对象长度的整倍数
# 都报错了
# 祷告
filter(A, a %in% B)
subset(A, a %in% B)
致谢:
求人是没有用的,信实的上帝是唯一的救法
参考文献:
https://www.jianshu.com/p/90b419e2c6bd
非独立情况:多重条件筛选
背景:
解决方案:用merge函数、dplyr::left_join
library(tidyverse)
# 独立情况
A <- data.frame(a = 1:5, b = 2:6, c = 3:7); A
B <- data.frame(a = 1:3, b = 2:4); B
A %>% filter(a %in% B$a, b %in% B$b)
A %>% subset(a %in% B$a, b %in% B$b)
# 非独立情况:多重条件筛选
A <- data.frame(a = rep(1:2, each = 2),
b = 1:2,
c = c("找我","找我","憋找我","找我")); A
B <- data.frame(a = c(1,1,1,2),
b = c(0,1,2,2),
c = c("找不到你","找到你","找到你","找到你")); B
# 根据B,在A中筛选出(a, b) = (1, 1)、(1, 2)、(2, 2)
# 即:(a=1 且 b=1)、(a=1 且 b=2)、(a=2 且 b=2)
A %>% filter(a == 1 & b == 1 | a == 1 & b == 2 | a == 2 & b == 2) %>%
mutate(d = rep("找到你", 3))
A %>% subset(a == 1 & b == 1 | a == 1 & b == 2 | a == 2 & b == 2) %>%
cbind(d = rep("找到你", 3))
# 用merge函数、dplyr::left_join
inner_join(A, B, by = c("a", "b"))
merge(A, B, by = c("a", "b"))
结果:
参考文献:
R语言中如何实现vlookup? - 知乎
https://www.zhihu.com/question/40738379
如何用R语言匹配两个表的数据? - 添墨的回答 - 知乎
https://www.zhihu.com/question/39755875/answer/102167249
致谢:
以上是关于R语言 筛选+匹配的主要内容,如果未能解决你的问题,请参考以下文章