簡體   English   中英

如何根據字符串列為每個觀察創建一個包含多行的新數據框?

[英]How can I create a new data frame with several rows for each observation based on string column?

我在 R 中有一個數據框,其中包含觀察數據。 一列包含每個觀察的多個數據點,記錄為一個帶有分隔符的長字符串。 我想重組這些數據,以便按照下面的示例,可以用多行進行一次觀察。

現在的數據如下所示:

df <- data.frame(matrix(c("A", "B",
                          "X", "Y",
                          "{data1},{data2}", "{data1}"),
                 nrow = 2,
                 ncol = 3,
                 byrow = F))
names(df) <- c("key", "info", "more_info")

我希望它看起來像這樣:

df <- data.frame(matrix(c("A", "A", "B",
                          "X", "X", "Y",
                          "{data1}", "{data2}", "{data1}"),
                 nrow = 3,
                 ncol = 3,
                 byrow = F))
names(df) <- c("key", "info", "more_info")

我的第一個想法是首先使用separate() ,然后使用pivot_longer() ,但這遇到了問題,因為每個觀察的最后一列的長度都不相同。 事實上,對於某些觀察,它可能包含數百條記錄。

您可以使用 tidyr 中的separate_rows

> library(tidyr)
> separate_rows(df, more_info, sep=",")
# A tibble: 3 x 3
  key   info  more_info
  <fct> <fct> <chr>    
1 A     X     {data1}  
2 A     X     {data2}  
3 B     Y     {data1}  

strsplit后帶有unnest的選項

library(dplyr)
library(tidyr)
df %>% 
    mutate(more_info = strsplit(more_info, ",")) %>% 
    unnest(c(more_info))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM