r-我如何将数据框架调整得更宽,将数字变量(如选举年)转变为二分变量



我有一个选举调查数据的数据框架。一个变量列出了选举年份,其他变量报告了个人层面的数据(如选票选择、性别(。

如何将包含选举年份的变量(在本例中为var1(转换为一系列二分变量。我可以用一系列的Recodes来完成这项工作,但我想让pivot_wider在这里工作。

var1<-sample(seq(1,5, 1), size=500, replace=T)
var2<-sample(c("red", "orange"), size=500, replace=T)
var3<-sample(c(0,1), size=500, replace=T)
df<-data.frame(var1, var2, var3)
library(tidyverse)
df
df %>% 
pivot_wider(., names_from=var1, values_from=var1)

类似的东西?

library(dplyr)
library(tidyr)
df %>%  
pivot_wider(id_cols = var1:var3, 
names_from = var1, 
values_from = var1, 
values_fn = (x) as.integer(length(x) > 0),
values_fill = 0L,
names_sort = T)
var2    var3   `1`   `2`   `3`   `4`   `5`
<chr>  <dbl> <int> <int> <int> <int> <int>
1 red        1     1     1     1     1     1
2 red        0     1     1     1     1     1
3 orange     1     1     1     1     1     1
4 orange     0     1     1     1     1     1

或求和:

df %>%  
pivot_wider(id_cols = var1:var3, 
names_from = var1, 
values_from = var1, 
values_fn = (x) as.integer(sum(x)),
values_fill = 0L,
names_sort = T)
var2    var3   `1`   `2`   `3`   `4`   `5`
<chr>  <dbl> <int> <int> <int> <int> <int>
1 red        1    27    56    54    84   165
2 red        0    20    50    90   128   115
3 orange     1    17    56    54    72   100
4 orange     0    27    70    78   108   135

最新更新