我有两个数据帧 df1
和 df2
. 我想基于两个数据集之间的子集生成堆积条形图 .
df1
包含两个任何项目之间的距离 .
set.seed(123)
df1 <- data.frame(col.x=rep(LETTERS[1:6], each=10),
col.y=rep(LETTERS[1:6], times=10),
dist=runif(60,0,3))
df1 <- df1 %>% filter(!col.x==col.y)
summary(df1)
# col.x col.y dist
# A:8 A:8 Min. :0.07384
# B:8 B:8 1st Qu.:0.78300
# C:8 C:8 Median :1.41564
# D:8 D:8 Mean :1.54097
# E:8 E:8 3rd Qu.:2.29776
# F:8 F:8 Max. :2.98281
df2
包含与所有这些项目关联的数据,其中每个项目具有不同值的子项目 .
set.seed(123)
df2 <- data.frame(col=sample(LETTERS[1:10],50,replace = T),
ET =sample(c('A1','A2','B3','B6','C5'),50,replace = T),
EV =sample(1:8,50,replace = T))
summary(df2)
# col ET EV
# C : 7 A1:11 Min. :1.00
# E : 7 A2:10 1st Qu.:2.25
# J : 6 B3: 9 Median :4.50
# B : 5 B6:13 Mean :4.58
# F : 5 C5: 7 3rd Qu.:6.00
# G : 5 Max. :8.00
# (Other):15
在第一步中,识别所选项目( B
)的特定距离( 2.5
)内的所有项目 .
colY <- df1 %>% filter(col.x=='B' & dist <= 2.5) %>% select(col.y)
在第二步中,将检索这些所选项的所有相关数据 .
datPlot <- df2 %>% filter(col %in% colY$col.y)
问题1:有没有可能将这些组合成单个dplyr语句?
我试图绘制堆积的条形图,以使用相关值的频率可视化子项:
datPlot %>% group_by(ET) %>% ggplot(aes(ET)) + geom_bar(aes(fill = EV))
下面的条形图看起来正确但无法生成堆积的条形图 .
问题2:上述方法有什么问题?
由于我的原始数据集非常庞大且至少有100M行,我想用最快的方法来解决这个问题 .
1 回答
您的
fill
变量是连续的 . 把它变成一个因素 . 您还可以使用semi_join
过滤一个数据帧的行 .