我有一個包含很多類別的變數,要求個人選擇他們的前 3 個選項。所以選擇是A, B,C和D這里(在我的資料庫中確實有超過 4 個可能的選擇)
`var1:choice1`<-c("A","B","C")
`var1:choice2`<-c("B","C","A")
`var1:choice3`<-c("C","D","B")
id=1:3
mydata<-data.frame(id,`var1:choice1`,`var1:choice2`,`var1:choice3`)
現在我想將選擇更改為虛擬變數,這樣我就可以獲得每個選擇的出現次數。我應該在下面有這張表:
var1.A var1.B var1.C var1.D
1 1 1 1 0
2 0 1 1 1
3 1 1 1 0
uj5u.com熱心網友回復:
在基礎 R 中,您可以創建一個簡單的表:
table(rep(mydata[[1]], 3), paste0('var1.', unlist(mydata[-1])))
var1.A var1.B var1.C var1.D
1 1 1 1 0
2 0 1 1 1
3 1 1 1 0
uj5u.com熱心網友回復:
這是一種方法:
mydata %>%
pivot_longer(-id) %>%
mutate(var = paste0(substr(name, 1, 5), value)) %>%
select(id, var, value) %>%
pivot_wider(names_from = var, values_from = value, values_fn = length, values_fill = 0)
# A tibble: 3 × 5
id var1.A var1.B var1.C var1.D
<int> <int> <int> <int> <int>
1 1 1 1 1 0
2 2 0 1 1 1
3 3 1 1 1 0
uj5u.com熱心網友回復:
pivot_wider和pivot_longer:_
library(tidyr)
library(dplyr)
mydata %>%
pivot_longer(-id,
names_to = c("var", "choice"),
names_pattern = "var(\\d).choice(\\d)") %>%
pivot_wider(names_from = value, names_prefix = "var1.",
values_from = choice, values_fn = length, values_fill = 0) %>%
select(-c(id, var))
# A tibble: 3 × 4
var1.A var1.B var1.C var1.D
<int> <int> <int> <int>
1 1 1 1 0
2 0 1 1 1
3 1 1 1 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/531253.html
標籤:r
上一篇:R中資料框中列的成對減法
