我有一个数据帧(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