[英]R dataframe: Transfrom values on multiple rows into list
I want to transform this:我想改变这个:
library(tibble)
(
tribble(
~id, ~value,
## -----|--------|
1, "qwer",
1, "asdf",
2, "uiop",
3, "zxcv",
3, "qwer",
3, "uiop" )
) -> input
into this:进入这个:
(
tribble(
~id, ~values,
## -----|------------------------------|
1, list("qwer", "asdf"),
2, list("uiop"),
3, list("zxcv", "qwer", "uiop"))
) -> output
Please note that the number of disinct values is not known...请注意,不明确值的数量是未知的......
Edit in view of comment below根据下面的评论进行编辑
If you want to store each value as list containing every value as distinct item, please do it like this如果您想将每个值存储为包含每个值作为不同项目的列表,请这样做
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"
old answer this will store item in a vector first and then in a list (single item)旧答案这将首先将项目存储在向量中,然后存储在列表中(单个项目)
Use this用这个
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"
sample data output is as under (which matches first syntax) still second one is suggested unless any specific reason to do so.示例数据 output 如下所示(与第一个语法匹配),除非有任何具体原因,否则建议使用第二个。
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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.