如何在R中拆分列名和删除部分名称,并将数据从宽格式转换为长格式

如何在R中拆分列名和删除部分名称,并将数据从宽格式转换为长格式,r,reshape,transpose,strsplit,delimiter-separated-values,R,Reshape,Transpose,Strsplit,Delimiter Separated Values,我有以下格式的数据: dataset <- data.frame(taxa = c("k__Archaea| p__Crenarchaeota", "k__Archaea| p__Euryarchaeota", "k__Bacteria| p__[Thermi]"), "11908.MM.0008.Inf.6m.Stool" =c(0,1760,0),

我有以下格式的数据:

dataset <- data.frame(taxa = c("k__Archaea| p__Crenarchaeota", "k__Archaea| p__Euryarchaeota", "k__Bacteria| p__[Thermi]"),
                      "11908.MM.0008.Inf.6m.Stool" =c(0,1760,0),
                      "11908.MM.01115.Inf.6m.Stool" =c(0,1517,0),
                      "11908.MM.0044.Inf.6m.Stool" =c(0,10815,0),
                      "11908.MM.0125.Mom.6m.Stool" = c(0,4719,0))
view(dataset)
fix_dataset <- data.frame(study_id = c(0008, 0115, 0044, 0125),
individual = c("Inf", "Inf", "Inf", "Mom" ),
`k__Archaea| p__Crenarchaeota` = c(0,0,0,0),
 `k__Archaea| p__Euryarchaeota`= c(1760, 1517,10815, 4719),
`` = c(0,0,0,0),
timept1 = c("6m", "6m", "6m", "6m"))

view(fix_dataset)
当我把它应用到我的数据时,我得到了以下错误消息

Error in select(., study_id, individual, timept1, starts_with("k_")) : 
  unused arguments (study_id, individual, timept1, starts_with("k_"))
In addition: Warning messages:
1: Expected 6 pieces. Additional pieces discarded in 44 rows [242, 243, 903, 904, 1564, 1565, 2225, 2226, 2886, 2887, 3547, 3548, 4208, 4209, 4869, 4870, 5530, 5531, 6191, 6192, ...]. 
2: Expected 6 pieces. Missing pieces filled with `NA` in 1012 rows [74, 93, 94, 223, 224, 225, 226, 227, 228, 229, 230, 469, 470, 532, 533, 535, 536, 540, 580, 593, ...]. 
3: Values are not uniquely identified; output will contain list-cols.
* Use `values_fn = list` to suppress this warning.
* Use `values_fn = length` to identify where the duplicates arise
* Use `values_fn = {summary_fun}` to summarise duplicates 

有人对这些错误消息有什么建议吗?

您可以通过以下代码实现这一点:

library(tidyverse)
dataset %>%
  pivot_longer(cols = -taxa) %>%
  separate(col = name, into = c("info1", "info2", "study_id", "individual", "timept1", "info3"), sep = "[.]") %>%
  pivot_wider(names_from = taxa,
              values_from = value) %>%
  select(study_id, individual, starts_with("taxa"), timept1)
其中:

# A tibble: 4 x 6
  study_id individual taxa1 taxa2 taxa3 timept1
  <chr>    <chr>      <dbl> <dbl> <dbl> <chr>  
1 0008     Inf            0  1760     0 6m     
2 01115    Inf            0  1517     0 6m     
3 0044     Inf            0 10815     0 6m     
4 0125     Mom            0  4719     0 6m 
#一个tible:4 x 6
研究\u id单个分类单元1分类单元2分类单元3时间PT1
10008 Inf 0 1760 6m
201115 Inf 0 1517 0 6m
30044 Inf 0 10815 0 6m
4 0125月底0 4719 0 6m

请注意,您的研究id中存在一些不一致之处,即在原始数据集中,其中一个id为“01115”,在您的首选输出中为“0115”。

您可以使用gsub轻松摆脱“11908”和“Stool”。例如
gsub(“^11908 | Stool$”,”,colnames(dataset))
。然后使用“重塑”将其转换为长格式。请澄清fix_数据集是否是您所需的输出,或者您是否希望fix_数据集仍以长格式为轴,如果是,则基于哪些列?fix_数据集是所需的输出,是的,这是我输入示例数据时的一个错误。如果解决方案对您有效,您可以通过单击左侧的小复选标记选择答案作为接受答案。您能否提供一个更详尽的代码示例,其中还包含一些不符合当前命名方案的其他列?
# A tibble: 4 x 6
  study_id individual taxa1 taxa2 taxa3 timept1
  <chr>    <chr>      <dbl> <dbl> <dbl> <chr>  
1 0008     Inf            0  1760     0 6m     
2 01115    Inf            0  1517     0 6m     
3 0044     Inf            0 10815     0 6m     
4 0125     Mom            0  4719     0 6m