将数据框中的值重新排列并提取到 R 中的特定列
Rearrange and extract values from a data frame to specific columns in R
我有一个像这样的数据框 df
> df <- data.frame(type=c("Id","v1","v2","Id","v1","v1","v2","Id","v1","v2","v3"),num=c(1000,200,500,1001,727,50,800,1002,400,365,865))
> df
type num
1 Id 1000
2 v1 200
3 v2 500
4 Id 1001
5 v1 727
6 v1 50
7 v2 800
8 Id 1002
9 v1 400
10 v2 365
11 v3 865
我需要创建另一个数据框,其中 Id, v1, v2, v3 作为列名和来自 df 的相应值每个 id 下面的变量属于那个 id,当同一个变量重复时,它必须用相同的 id 映射,如果变量不存在,则必须给出 NA。这是所需的输出。
Id v1 v2 v3
1 1000 200 500 NA
2 1001 727 NA NA
3 1001 50 800 NA
4 1002 400 365 865
我想到了一个使用for循环的方法。但它似乎复杂且难以构造它。有没有不用for循环的方法呢
尝试这样做
library(tidyverse)
df %>%
mutate(id = ifelse(type == "Id", num, NA)) %>%
fill(id) %>%
filter(type != "Id") %>%
group_by(id, type) %>%
mutate(n = row_number()) %>%
pivot_wider(c(id, n), names_from = type, values_from = num) %>%
select(-n) %>%
ungroup()
# A tibble: 4 x 4
id v1 v2 v3
<dbl> <dbl> <dbl> <dbl>
1 1000 200 500 NA
2 1001 727 800 NA
3 1001 50 NA NA
4 1002 400 365 865
我有一个像这样的数据框 df
> df <- data.frame(type=c("Id","v1","v2","Id","v1","v1","v2","Id","v1","v2","v3"),num=c(1000,200,500,1001,727,50,800,1002,400,365,865))
> df
type num
1 Id 1000
2 v1 200
3 v2 500
4 Id 1001
5 v1 727
6 v1 50
7 v2 800
8 Id 1002
9 v1 400
10 v2 365
11 v3 865
我需要创建另一个数据框,其中 Id, v1, v2, v3 作为列名和来自 df 的相应值每个 id 下面的变量属于那个 id,当同一个变量重复时,它必须用相同的 id 映射,如果变量不存在,则必须给出 NA。这是所需的输出。
Id v1 v2 v3
1 1000 200 500 NA
2 1001 727 NA NA
3 1001 50 800 NA
4 1002 400 365 865
我想到了一个使用for循环的方法。但它似乎复杂且难以构造它。有没有不用for循环的方法呢
尝试这样做
library(tidyverse)
df %>%
mutate(id = ifelse(type == "Id", num, NA)) %>%
fill(id) %>%
filter(type != "Id") %>%
group_by(id, type) %>%
mutate(n = row_number()) %>%
pivot_wider(c(id, n), names_from = type, values_from = num) %>%
select(-n) %>%
ungroup()
# A tibble: 4 x 4
id v1 v2 v3
<dbl> <dbl> <dbl> <dbl>
1 1000 200 500 NA
2 1001 727 800 NA
3 1001 50 NA NA
4 1002 400 365 865