如何从相同的记录 ID 添加变量,但在 R 中有多个名称?
How to add variables from the same record id but with multiple names in R?
我在尝试整理数据时遇到了一个问题。我有一个如下所示的数据框:
ID price location
1 10.2 A
2 9.0 B
2 9.0 C
3 8.5 F
3 8.5 G
对于每个唯一 ID,除位置外,所有列都相同。我想将 table 旋转成这样:
ID price location
1 10.2 A
2 9.0 B C
3 8.5 F G
我想删除重复的 ID 并将不同的位置一起移动到一列中。我试过 pivot_wider() 函数,但没有成功。
如果有人可以提供帮助,我将不胜感激。谢谢!
您可以使用 mutate
和 nest()
library(tidyverse)
dfr%>%group_by(ID, price)%>%nest()%>%
mutate(location = map(data, ~select(.x, location)))%>%
select(ID, price, location)%>%ungroup()
# A tibble: 3 x 3
ID price location
<dbl> <dbl> <list>
1 1 10.2 <tibble [1 × 1]>
2 2 9 <tibble [2 × 1]>
3 3 8.5 <tibble [2 × 1]>
更新:
使用这个:
dfr%>%group_by(ID, price)%>%nest()%>%
mutate(location = map(data, ~stringi::stri_paste(.x$location,collapse=',')))%>%
unnest(location)%>%
select(ID, price, location)%>%ungroup()
# A tibble: 3 x 3
ID price location
<dbl> <dbl> <chr>
1 1 10.2 A
2 2 9 B,C
3 3 8.5 F,G
更简单的方法是:
dfr%>%group_by(ID, price)%>%
summarise(location = stringi::stri_paste(location,collapse=','))
# A tibble: 3 x 3
# Groups: ID [3]
ID price location
<dbl> <dbl> <chr>
1 1 10.2 A
2 2 9 B,C
3 3 8.5 F,G
我在尝试整理数据时遇到了一个问题。我有一个如下所示的数据框:
ID price location
1 10.2 A
2 9.0 B
2 9.0 C
3 8.5 F
3 8.5 G
对于每个唯一 ID,除位置外,所有列都相同。我想将 table 旋转成这样:
ID price location
1 10.2 A
2 9.0 B C
3 8.5 F G
我想删除重复的 ID 并将不同的位置一起移动到一列中。我试过 pivot_wider() 函数,但没有成功。 如果有人可以提供帮助,我将不胜感激。谢谢!
您可以使用 mutate
和 nest()
library(tidyverse)
dfr%>%group_by(ID, price)%>%nest()%>%
mutate(location = map(data, ~select(.x, location)))%>%
select(ID, price, location)%>%ungroup()
# A tibble: 3 x 3
ID price location
<dbl> <dbl> <list>
1 1 10.2 <tibble [1 × 1]>
2 2 9 <tibble [2 × 1]>
3 3 8.5 <tibble [2 × 1]>
更新:
使用这个:
dfr%>%group_by(ID, price)%>%nest()%>%
mutate(location = map(data, ~stringi::stri_paste(.x$location,collapse=',')))%>%
unnest(location)%>%
select(ID, price, location)%>%ungroup()
# A tibble: 3 x 3
ID price location
<dbl> <dbl> <chr>
1 1 10.2 A
2 2 9 B,C
3 3 8.5 F,G
更简单的方法是:
dfr%>%group_by(ID, price)%>%
summarise(location = stringi::stri_paste(location,collapse=','))
# A tibble: 3 x 3
# Groups: ID [3]
ID price location
<dbl> <dbl> <chr>
1 1 10.2 A
2 2 9 B,C
3 3 8.5 F,G