首页 > 解决方案 > 通过R中的几个条件将多行合并为一行

问题描述

我正在尝试将多行合并为一行。我希望将所有样本Group.1与其对应Group.2cqs数据合并到一行中lot_number

Group.1重要细节:我在列中有三种不同的样本类型。我认为我遇到的困难是我需要将三种不同的样本类型合并到一行中lot_number。我知道的很多工具只合并两个数据表或框架。

是)我有的:

第 1 组 第 2 组 qq 批号
1xLOD_2234567 MS2 39 2234567
NC_2234567 MS2 37 2234567

我需要的:

第 1 组 第 2 组 qq 批号 (新上校) (新上校) (新上校)
1xLOD_2234567 MS2 39 2234567 NC_2234567 MS2 37

这些是我希望按批号匹配的不同浓度水平的溶液。我试过这样的想法:

aggtest2 <- reshape(aggtest2, idvar = "lot_number", timevar = "Group.2", direction = "wide"

aggtest0 <- reshape(aggtest2, idvar = c("lot_number","Group.2"), direction = "wide")

我也尝试了下面两条评论中的建议。我只是无法想出一个解决方案来保留所有数据并将其全部保存在自己的单元格中。任何帮助是极大的赞赏。

标签: r

解决方案


我们可以用pivot_wider

library(dplyr)
library(tidyr)
library(data.table)
aggtest2 %>%
   mutate(rn = rowid(Group.2, lot_number)) %>% 
   pivot_wider(names_from = rn, values_from = c(Group.1, cqs))
# A tibble: 1 x 6
#  Group.2 lot_number Group.1_1     Group.1_2  cqs_1 cqs_2
#  <chr>        <int> <chr>         <chr>      <int> <int>
#1 MS2        2234567 1xLOD_2234567 NC_2234567    39    37

数据

aggtest2 <- structure(list(Group.1 = c("1xLOD_2234567", "NC_2234567"),
Group.2 = c("MS2", 
"MS2"), cqs = c(39L, 37L), lot_number = c(2234567L, 2234567L)),
class = "data.frame", row.names = c(NA, 
-2L))

推荐阅读