私はこれを変換したい:
library(tibble)
(
tribble(
~id, ~value,
## -----|--------|
1, "qwer",
1, "asdf",
2, "uiop",
3, "zxcv",
3, "qwer",
3, "uiop" )
) -> input
これに:
(
tribble(
~id, ~values,
## -----|------------------------------|
1, list("qwer", "asdf"),
2, list("uiop"),
3, list("zxcv", "qwer", "uiop"))
) -> output
不明瞭な値の数は不明であることに注意してください...
以下のコメントを考慮して編集
すべての値を個別のアイテムとして含むリストとして各値を保存する場合は、次のようにしてください
input %>% group_by(dummy = row_number()) %>%
mutate(value = list(value)) %>%
ungroup() %>% group_by(id) %>%
summarise(value = list(value))
# A tibble: 3 x 2
id value
<dbl> <list>
1 1 <list [2]>
2 2 <list [1]>
3 3 <list [3]>
#check its structure
output <- input %>% group_by(dummy = row_number()) %>%
mutate(value = list(value)) %>%
ungroup() %>% group_by(id) %>%
summarise(value = list(value))
output$value[[1]]
[[1]]
[1] "qwer"
[[2]]
[1] "asdf"
#OR
output$value
[[1]]
[[1]][[1]]
[1] "qwer"
[[1]][[2]]
[1] "asdf"
[[2]]
[[2]][[1]]
[1] "uiop"
[[3]]
[[3]][[1]]
[1] "zxcv"
[[3]][[2]]
[1] "qwer"
[[3]][[3]]
[1] "uiop"
古い答えこれは最初にベクトルにアイテムを保存し、次にリストにアイテムを保存します(単一アイテム)
これを使って
input %>% group_by(id) %>% summarise(value = list(value))
# A tibble: 3 x 2
id value
<dbl> <list>
1 1 <chr [2]>
2 2 <chr [1]>
3 3 <chr [3]>
#check its items
output <- input %>% group_by(id) %>% summarise(value = list(value))
output$value[[1]]
[1] "qwer" "asdf"
#OR
output$value
[[1]]
[1] "qwer" "asdf"
[[2]]
[1] "uiop"
[[3]]
[1] "zxcv" "qwer" "uiop"
サンプルデータの出力は以下のとおりです(最初の構文に一致します)。特に理由がない限り、2番目の出力が推奨されます。
output$value
(
tribble(
~id, ~values,
## -----|------------------------------|
1, list("qwer", "asdf"),
2, list("uiop"),
3, list("zxcv", "qwer", "uiop"))
) -> output
output$values
[[1]]
[[1]][[1]]
[1] "qwer"
[[1]][[2]]
[1] "asdf"
[[2]]
[[2]][[1]]
[1] "uiop"
[[3]]
[[3]][[1]]
[1] "zxcv"
[[3]][[2]]
[1] "qwer"
[[3]][[3]]
[1] "uiop"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加