如何将数据框旋转得更宽,将数字变量(例如选举年)转换为二分变量
How do I pivot a data frame wider turning a variable of numbers (e.g. election years) into dichotomous variables
我有一个选举调查数据的数据框。一个变量列出选举年份,其他变量报告个人级别数据(例如投票选择、性别)。
如何将包含选举年的变量(在本例中为 var1)转换为一系列二分变量。
我可以通过一系列重新编码来做到这一点,但我想让 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
我有一个选举调查数据的数据框。一个变量列出选举年份,其他变量报告个人级别数据(例如投票选择、性别)。
如何将包含选举年的变量(在本例中为 var1)转换为一系列二分变量。 我可以通过一系列重新编码来做到这一点,但我想让 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