[英]How can I use mutate to create a new column based only on a subset of other rows of a data frame?
[英]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.