【问题标题】:Column split within a dataframe into multiple columns and cbind within the same dataframe将数据框中的列拆分为多个列并在同一数据框中进行 cbind
【发布时间】:2020-06-18 15:05:22
【问题描述】:

我有一个包含“ID”列的数据框。
我想将名为“ID1”、“ID2”等的列拆分为多个列(附加图像),以便“/”符号之前和之后的字符分别位于每个“ID1”、“ID2”等的单独列中和结果列是序列中数据框的一部分。

The image shows a data frame with the name "df"

我尝试过使用
within(df, ID1 <- do.call("rbind", strsplit(df$ID1, "/", fixed= TRUE)))
但是,这会导致数据框中的“ID1”列更改为矩阵“ID1”。

如果我使用代码
within(df, ID1 <- as.data.frame(do.call("rbind", strsplit(df$ID1, "/", fixed= TRUE))))
然后创建的新列会覆盖名为“Time1”、“Conc1”、“Blank1”等的列。

此外,是否可以使用循环一次性转换所有此类列“ID1”、“ID2”等?

【问题讨论】:

标签: r dataframe split


【解决方案1】:

tidyr::separate 仅适用于这些场景。这样做

dat <- data.frame(
  stringsAsFactors = FALSE,
              Date = c("01-01-2020", "02-01-2020", "03-01-2020", "04-01-2020"),
               ID1 = c("HL/PS/IITD/QF/227",
                       "HL/PS/IITD/QF/228","HL/PS/IITD/QF/229","HL/PS/IITD/QF/230"),
             Time1 = c(3.252661544, 4.58741088, 6.592053573, 2.776812359),
             Conc1 = c(325.2661544, 458.741088, 659.2053573, 277.6812359),
               ID2 = c("HL/PS/IITD/TF/500",
                       "HL/PS/IITD/TF/501","HL/PS/IITD/TF/502","HL/PS/IITD/TF/503"),
             Time2 = c(3.149086291, 9.202242653, 7.463162859, 7.944689942),
             Conc2 = c(314.9086291, 920.2242653, 746.3162859, 794.4689942)
)

library(tidyverse)

dat %>% separate(ID1, into = paste0('ID1_', 1:5), sep = '\\/') %>%
  separate(ID2, into = paste0('ID2_', 1:5), sep = '\\/')
#>         Date ID1_1 ID1_2 ID1_3 ID1_4 ID1_5    Time1    Conc1 ID2_1 ID2_2 ID2_3
#> 1 01-01-2020    HL    PS  IITD    QF   227 3.252662 325.2662    HL    PS  IITD
#> 2 02-01-2020    HL    PS  IITD    QF   228 4.587411 458.7411    HL    PS  IITD
#> 3 03-01-2020    HL    PS  IITD    QF   229 6.592054 659.2054    HL    PS  IITD
#> 4 04-01-2020    HL    PS  IITD    QF   230 2.776812 277.6812    HL    PS  IITD
#>   ID2_4 ID2_5    Time2    Conc2
#> 1    TF   500 3.149086 314.9086
#> 2    TF   501 9.202243 920.2243
#> 3    TF   502 7.463163 746.3163
#> 4    TF   503 7.944690 794.4690

reprex package (v2.0.0) 于 2021-06-13 创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2019-09-15
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多