r - 在 R 中折叠重复项,其中只有唯一的列值被连接
问题描述
我需要折叠一个大表(V19 为 5M),在其中我根据特定列(V1)删除重复项,如果唯一,则合并所有其他列的值(如果不是,则只报告一次结果)。
我从这里尝试了一些解决方案,但这些示例主要针对 2 个变量执行 - 我有 19 个。最终发生的情况是,表的整个其余部分都合并在一个数字列表列中。
输入:
V1 V2 V3 V4 V5 V6
TR1000 chr1 1000 1200 A +
TR1000 chr1 1000 1200 B +
TR1000 chr1 1000 1200 C +
TR2000 chr2 2000 2500 D +
TR2000 chr2 2000 2500 E +
TR3000 chr3 3000 3500 F +
我需要:
V1 V2 V3 V4 V5 V6
TR1000 chr1 1000 1200 A, B, C +
TR2000 chr2 2000 2500 D, E +
TR3000 chr3 3000 3500 F +
解决方案
使用dplyr
.
library(dplyr)
dat2 <- dat %>%
group_by_at(vars(-V5)) %>%
summarize(V5 = toString(V5)) %>%
ungroup() %>%
select(names(dat))
dat2
# # A tibble: 3 x 6
# V1 V2 V3 V4 V5 V6
# <chr> <chr> <int> <int> <chr> <chr>
# 1 TR1000 chr1 1000 1200 A, B, C +
# 2 TR2000 chr2 2000 2500 D, E +
# 3 TR3000 chr3 3000 3500 F +
数据
dat <- read.table(text = "V1 V2 V3 V4 V5 V6
TR1000 chr1 1000 1200 A +
TR1000 chr1 1000 1200 B +
TR1000 chr1 1000 1200 C +
TR2000 chr2 2000 2500 D +
TR2000 chr2 2000 2500 E +
TR3000 chr3 3000 3500 F + ",
header = TRUE, stringsAsFactors = FALSE)
推荐阅读
- python - FMU - 将新值重新分配给变量时出现问题
- scorm - 简化-scorm window.open(scormUrl)
- kubernetes - 启动容器进程导致“process_linux.go:303:从管道获取最终孩子的 pid 导致 \”EOF\“”:未知
- android - 如何从 Android Studio 中的 getData() 中提取文件名
- javascript - 从 React Query 中的另一个查询的重试中重新获取不同的查询
- php - 如何从 Vue CLI 本地服务器使用 PHP 本地服务器会话
- rest - Keycloak Get Users 返回 403 禁止
- ssl - pycharm的“pip install package”错误
- firebase - Firebase Firestore 3 个随机文档字段的总和低于设定数量
- java - 在 SpringBoot 中出现 NoHandlerFoundException 时无法返回自定义响应