如何使用 pivot_wide 成多列
how to use pivot_wide into multiple columns
您好,我想根据 3 个变量(列)将一个长数据框转换为一个宽数据框,总共有 6 列。
这里我有一个长数据框的例子如下
dat <- data.frame("time1"=c(6.28,17,49,72,56),
"target"=c("A","C","B","C","B"),
"day"=c(1,3,2,1,3))
预期结果:
day1.time day1.target day2.time day2.target day3.time day3.target
6.28 A 49 B 17 C
72 C NA NA 56 B
我使用 tidyr
包中的 pivot_wide
尝试了下面的方法。它给了我附加变量而不是我希望的分隔列。不知道有什么建议可以达到预期的效果。
dat %>% pivot_wider(names_from = c(day,target),
values_from = time1 ,
values_fill = NA)
A tibble: 1 x 5
`1_A` `3_C` `2_B` `1_C` `3_B`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 6.28 17 49 72 56
我也曾尝试根据 target
/ day
对数据进行子集化,然后使用 pivot_wide
,因为你可以猜到 day1.target
等列获胜在那里。原始数据很大,所以我什至无法用 excel (手动)处理它。
如果有任何解决此问题的指示,将不胜感激。
干杯!
names_from
应该是单列,而 values_from
可以来自多列以及我们需要考虑重复行的事实。执行 group_by(day) %>% mutate(rn = row_number())
或使用 data.table
中的 rowid(day)
。因此,可以在执行 pivot_wider
之前创建一个序列列
library(dplyr)
library(tidyr)
library(data.table)
dat %>%
mutate( rn = rowid(day)) %>%
pivot_wider(names_from = day, values_from = c(time1, target),
names_prefix = 'day', names_sep = ".") %>%
select(-rn)
您好,我想根据 3 个变量(列)将一个长数据框转换为一个宽数据框,总共有 6 列。
这里我有一个长数据框的例子如下
dat <- data.frame("time1"=c(6.28,17,49,72,56),
"target"=c("A","C","B","C","B"),
"day"=c(1,3,2,1,3))
预期结果:
day1.time day1.target day2.time day2.target day3.time day3.target
6.28 A 49 B 17 C
72 C NA NA 56 B
我使用 tidyr
包中的 pivot_wide
尝试了下面的方法。它给了我附加变量而不是我希望的分隔列。不知道有什么建议可以达到预期的效果。
dat %>% pivot_wider(names_from = c(day,target),
values_from = time1 ,
values_fill = NA)
A tibble: 1 x 5
`1_A` `3_C` `2_B` `1_C` `3_B`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 6.28 17 49 72 56
我也曾尝试根据 target
/ day
对数据进行子集化,然后使用 pivot_wide
,因为你可以猜到 day1.target
等列获胜在那里。原始数据很大,所以我什至无法用 excel (手动)处理它。
如果有任何解决此问题的指示,将不胜感激。
干杯!
names_from
应该是单列,而 values_from
可以来自多列以及我们需要考虑重复行的事实。执行 group_by(day) %>% mutate(rn = row_number())
或使用 data.table
中的 rowid(day)
。因此,可以在执行 pivot_wider
library(dplyr)
library(tidyr)
library(data.table)
dat %>%
mutate( rn = rowid(day)) %>%
pivot_wider(names_from = day, values_from = c(time1, target),
names_prefix = 'day', names_sep = ".") %>%
select(-rn)