Note:个
请注意,在发帖之前,我已经try 了以下方法来解决我的问题:
- Transpose / reshape dataframe without "timevar" from long to wide format个
- How to Reshape Long to Wide While Preserving Some Variables in R个
- Convert data from long format to wide format with multiple measure columns个
试图解决我的问题,但没有成功
Problem个
假设我有以下数据,它显示了项从开始到结束的流动方式
> run = c(1, 2, 3, 3, 4, 5, 5, 5, 6, 7, 7, 7, 8, 9, 10, 10, 11)
> start_location = c("A", "C", "A", "B", "A", "B", "C", "A", "B", "C", "B", "A", "A", "A", "A", "B", "C")
> end_location = c("B", "B", "B", "C", "C", "C", "A", "C", "A", "B", "A", "C", "B", "C", "B", "C", "B")
> df = data.frame(run, start_site, end_site)
> df
run start_site end_site
1 1 A B
2 2 A C
3 3 A B
4 3 B C
5 4 A C
6 5 B C
7 5 C A
8 5 A C
9 6 B A
10 7 C B
11 7 B A
12 7 A C
13 8 A B
14 9 A C
15 10 A B
16 10 B C
17 11 C B
我想将数据转换为如下所示的"宽"格式,每个stage实例都有一个新的列.
> # Desired result
run first_location second_location third_location fourth_location
[1,] "1" "A" "B" NA NA
[2,] "2" "C" "B" NA NA
[3,] "3" "A" "B" "C" NA
[4,] "4" "A" "C" NA NA
[5,] "5" "B" "C" "A" "C"
[6,] "6" "C" "A" NA NA
[7,] "7" "C" "B" "A" "C"
[8,] "8" "A" "B" NA NA
[9,] "9" "A" "C" NA NA
[10,] "10" "A" "B" "C" NA
[11,] "11" "C" "B" NA NA
Attempted Solution个
我已经try 了以下几种方法,但没有得到预期的效果.我的专栏比我需要的多.
> library(dplyr)
> library(tidyr)
>
> # Unsuccessful attempt
> df_long = melt(df, id.vars=c("run"))
> df_long %>%
select(!variable) %>%
group_by(run) %>%
dplyr::mutate(rn = paste0("location_",row_number())) %>%
spread(rn, value)
# A tibble: 11 x 7
# Groups: run [11]
run location_1 location_2 location_3 location_4 location_5 location_6
<dbl> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 A B NA NA NA NA
2 2 A C NA NA NA NA
3 3 A B B C NA NA
4 4 A C NA NA NA NA
5 5 B C A C A C
6 6 B A NA NA NA NA
7 7 C B A B A C
8 8 A B NA NA NA NA
9 9 A C NA NA NA NA
10 10 A B B C NA NA
11 11 C B NA NA NA NA
有没有人能帮我找出错误,帮我得到想要的结果?
谢谢你看我的帖子.