1. ホーム
  2. r

[解決済み] 列の区切り文字列を分割し、新しい行として挿入する【重複

2022-06-19 03:43:56

質問

<余談
この質問には、すでにここで回答があります :
クローズド 5年前 .

以下のようなデータフレームがあります。

+-----+-------+
|  V1 |  V2   |
+-----+-------+
|  1  | a,b,c |
|  2  | a,c   |
|  3  | b,d   |
|  4  | e,f   |
|  .  | .     |
+-----+-------+

アルファベットはそれぞれカンマで区切られた文字です。V2をカンマごとに分割し、分割された文字列を新しい行として挿入したいと思います。例えば、希望する出力は次のようになります。

+----+----+
| V1 | V2 |
+----+----+
|  1 |  a |
|  1 |  b |
|  1 |  c |
|  2 |  a |
|  2 |  c |
|  3 |  b |
|  3 |  d |
|  4 |  e |
|  4 |  f |
+----+----+

を使おうとしています。 strsplit() を使って、まず V2 を吐き出し、そのリストをデータフレームにキャストしようとしています。それはうまくいきませんでした。どんな助けでも感謝されるでしょう。

どのように解決するのですか?

別の方法を紹介します。

df <- read.table(textConnection("1|a,b,c\n2|a,c\n3|b,d\n4|e,f"), header = F, sep = "|", stringsAsFactors = F)

df
##   V1    V2
## 1  1 a,b,c
## 2  2   a,c
## 3  3   b,d
## 4  4   e,f

s <- strsplit(df$V2, split = ",")
data.frame(V1 = rep(df$V1, sapply(s, length)), V2 = unlist(s))
##   V1 V2
## 1  1  a
## 2  1  b
## 3  1  c
## 4  2  a
## 5  2  c
## 6  3  b
## 7  3  d
## 8  4  e
## 9  4  f