将列名与另一个数据框匹配并拆分为单独的数据框

  • 本文关键字:数据 拆分 单独 另一个 r
  • 更新时间 :
  • 英文 :


我有一个数据帧(df),它看起来像这样:

tex21.222   chic56.345  wa34.907
0.5         0.6         1.12
0.8         1.2         0.9

我想根据另一个名为keys的数据框将此数据框划分为单独的数据框,如下所示:

site_name   sample_name
tex_1       tex21.222
tex_1       tex23.234
chic_1      chic56.345 
wa_1        wa34.907
wa_2        wa24.277

对于df的每一列,我想(1)将列名称与keys中的sample_name匹配以获得site_name,(2)将df中具有相同site_name的所有列移动到单独的数据框中。

所以,最后,我想要有单独的数据帧,所有的列都属于tex_1,所有的列都属于chic_1等。

我该怎么做?

尝试下一个代码:

library(dplyr)
library(tidyr)
#Code
data <- df %>% pivot_longer(everything()) %>%
left_join(keys,by = c('name'='sample_name'))
#Split
List <- split(data,data$site_name)
List <- lapply(List,function(x) {x$site_name<-NULL;x})
list2env(List,envir = .GlobalEnv)

输出:

List
$chic_1
# A tibble: 2 x 2
name       value
<chr>      <dbl>
1 chic56.345   0.6
2 chic56.345   1.2
$tex_1
# A tibble: 2 x 2
name      value
<chr>     <dbl>
1 tex21.222   0.5
2 tex21.222   0.8
$wa_1
# A tibble: 2 x 2
name     value
<chr>    <dbl>
1 wa34.907  1.12
2 wa34.907  0.9 

使用merge+stack+split的基本R选项

u <- merge(stack(df1), df2, by.x = "ind", by.y = "sample_name")
split(u[c("ind", "values")], u$site_name)

$chic_1
ind values
1 chic56.345    0.6
2 chic56.345    1.2
$tex_1
ind values
3 tex21.222    0.5
4 tex21.222    0.8
$wa_1
ind values
5 wa34.907   1.12
6 wa34.907   0.90

最新更新