按组逐行将转置列转变为新列
Mutate a transposed column into new columns row-wise by group
我将数据分组如下:
group id var
1 1 1 1
2 1 2 0
3 1 3 1
4 2 1 0
5 2 2 1
6 3 1 0
我想创建 N 个新的 var
列(var1
、var2
、...),其中 N 是一个组中的最大个体数(在此案例 N = 3,因为最大的组是 group 1
,它有三个 id
s.
var1
应包含每个组中 id = 1
的 var
值;同样,var2
应该包含每个组中每个 id = 2
的 var
值。如果列数超过组中的列数,则应 return NA
.
上述示例的寻求输出为:
group id var var1 var2 var3
1 1 1 1 1 0 1
2 1 2 0 1 0 1
3 1 3 1 1 0 1
4 2 1 0 0 1 NA
5 2 2 1 0 1 NA
6 3 1 0 0 NA NA
示例代码
a <- data.frame(group = c(1,1,1,2,2,3),
id = c(1,2,3,1,2,1),
var = c(1,0,1,0,1,0))
您似乎想将数据框旋转得更宽:您可以使用 pivot_wider()
。如果要保留原来的行数,也可以使用right_join()
.
library(tidyverse)
a %>% right_join(
pivot_wider(a,values_from = var, names_from = id, names_prefix = "var"),
by='group'
)
输出:
group id var var1 var2 var3
1 1 1 1 1 0 1
2 1 2 0 1 0 1
3 1 3 1 1 0 1
4 2 1 0 0 1 NA
5 2 2 1 0 1 NA
6 3 1 0 0 NA NA
但是,也许这有点多余?仅使用 pivot_wider()
保持相同的信息,因为 varx
是原始的 id
列:
library(tidyverse)
a %>%
pivot_wider(values_from = var, names_from = id, names_prefix = "var")
# A tibble: 3 x 4
group var1 var2 var3
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 1
2 2 0 1 NA
3 3 0 NA NA
我将数据分组如下:
group id var
1 1 1 1
2 1 2 0
3 1 3 1
4 2 1 0
5 2 2 1
6 3 1 0
我想创建 N 个新的 var
列(var1
、var2
、...),其中 N 是一个组中的最大个体数(在此案例 N = 3,因为最大的组是 group 1
,它有三个 id
s.
var1
应包含每个组中 id = 1
的 var
值;同样,var2
应该包含每个组中每个 id = 2
的 var
值。如果列数超过组中的列数,则应 return NA
.
上述示例的寻求输出为:
group id var var1 var2 var3
1 1 1 1 1 0 1
2 1 2 0 1 0 1
3 1 3 1 1 0 1
4 2 1 0 0 1 NA
5 2 2 1 0 1 NA
6 3 1 0 0 NA NA
示例代码
a <- data.frame(group = c(1,1,1,2,2,3),
id = c(1,2,3,1,2,1),
var = c(1,0,1,0,1,0))
您似乎想将数据框旋转得更宽:您可以使用 pivot_wider()
。如果要保留原来的行数,也可以使用right_join()
.
library(tidyverse)
a %>% right_join(
pivot_wider(a,values_from = var, names_from = id, names_prefix = "var"),
by='group'
)
输出:
group id var var1 var2 var3
1 1 1 1 1 0 1
2 1 2 0 1 0 1
3 1 3 1 1 0 1
4 2 1 0 0 1 NA
5 2 2 1 0 1 NA
6 3 1 0 0 NA NA
但是,也许这有点多余?仅使用 pivot_wider()
保持相同的信息,因为 varx
是原始的 id
列:
library(tidyverse)
a %>%
pivot_wider(values_from = var, names_from = id, names_prefix = "var")
# A tibble: 3 x 4
group var1 var2 var3
<dbl> <dbl> <dbl> <dbl>
1 1 1 0 1
2 2 0 1 NA
3 3 0 NA NA