在R Studio中提取col1与col3共有值对应col2数据并拆分数据集
用R Studio拆分数据集:提取col1与col3的共有/非共有值对应数据
需求说明
现有包含col1、col2、col3三列的大数据集,需要生成两个子数据集:
- 数据集1:包含
col1与col3的共有值,以及对应的col2数据 - 数据集2:包含
col1与col3的非共有值,以及对应的col2数据
加载示例数据集
首先加载你提供的示例数据集:
# 加载示例数据集 df <- structure(list(col1 = c("F1:19911", "F6:29731", "F2:26353", "F2:11604", "F1:20748", "F6:25287", "F2:19148", "F4:20479", "F3:19564", "F4:29795", "F1:32641", "F1:23920", "F2:37051", "F4:31963", "F1:27075", "F1:34085", "F1:31602", "F2:28123", "F2:28512", "F4:31963", "F6:19142", "F6:21309", "F2:11153", "F2:20275", "F2:31059", "F2:3199", "F2:31759", "F2:18603", "F4:21551", "F1:14042", "F2:25183", "F2:15691", "F2:17735", "F3:22580", "F4:23956", "F3:29087", "F3:2604", "F1:18485"), col2 = c(99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99), col3 = c("F1:45496", "F6:49991", "F1:42766", "F6:41131", "F1:49777", "F1:48389", "F3:40668", "F1:51123", "F6:49282", "F6:38250", "F1:59546", "F6:38404", "F1:40600", "F6:25287", "F2:19148", "F1:31602", "F2:28123", "F1:19911", "F6:45844", "F1:40519", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA )), row.names = c(NA, -38L), class = c("tbl_df", "tbl", "data.frame"))
实现方案(高效适配大数据)
推荐使用dplyr包处理,语法简洁且效率高,适合大规模数据:
# 如果未安装dplyr先安装 # install.packages("dplyr") library(dplyr) # 1. 提取col3中非NA的值,找出col1与col3的共有值 common_values <- intersect(df$col1, na.omit(df$col3)) # 2. 生成共有值数据集(dataset1) dataset1 <- df %>% filter(col1 %in% common_values) %>% select(col1, col2) # 3. 生成非共有值数据集(dataset2) dataset2 <- df %>% filter(!(col1 %in% common_values)) %>% select(col1, col2)
结果示例
运行上述代码后,你会得到:
dataset1(共有值数据集)
| col1 | col2 |
|---|---|
| F1:19911 | 99 |
| F6:25287 | 99 |
| F2:19148 | 99 |
| F1:31602 | 99 |
| F2:28123 | 99 |
dataset2(非共有值数据集)
| col1 | col2 |
|---|---|
| F6:29731 | 99 |
| F2:26353 | 99 |
| F2:11604 | 99 |
| F1:20748 | 99 |
| ... | ... |
内容的提问来源于stack exchange,提问作者Bhagyashree Swarge
相关产品推荐
相关产品推荐

