[英]Covert dummy variables to single categorical in R?
這里、 這里和這里都提出了類似的問題。 但是,它們似乎並不能完全滿足我的需要。 例如,如果我有這樣的數據集:
df <- data.frame(
x = rnorm(10),
y = rnorm(10),
a = c(0,0,0,1,1,0,0,0,1,0),
b = c(1,1,1,1,0,0,1,0,0,0),
c = c(0,1,0,1,0,0,0,0,0,0),
z = c(1,1,1,1,1,0,1,0,1,0)
)
我想要做的是將變量a
、 b
和c
轉換為水平為a
、 b
和c
的單個分類。 但正如您所見,有時 2 個變量會出現在同一行中。 所以,我想要實現的是一個看起來像這樣的數據框:
df <- data.frame(
x = rnorm(10),
y = rnorm(10),
a = c(0,0,0,1,1,0,0,0,1,0),
b = c(1,1,1,1,0,0,1,0,0,0),
c = c(0,1,0,1,0,0,0,0,0,0),
z = c(“b”,“b,c”,“b”,“a,b,c”,“a”,0,“b”,0,“a”,0)
)
我嘗試使用:
apply(df[,c("a","b", "c")], 1, sum, na.rm=TRUE)
它總結了每個變量的數量......但我不確定如何將 2 個(或更多)變量組合成一個單一的因素水平?
關於我如何做到這一點的任何建議?
逐行遍歷所選列( MARGIN = 1
),將值為 1 的列名子集並將它們paste
在一起
df$z <- apply(df[c('a', 'b', 'c')], 1, function(x) toString(names(x)[x ==1]))
df$z
#[1] "b" "b, c" "b" "a, b, c" "a" "" "b" "" "a" ""
如果我們想把""
改成“0”
df$z[df$z == ''] <- '0'
對於具有 purrr 和 dplyr 的解決方案:
df %>% mutate(z = pmap_chr(select(., a, b, c), ~ {v1 <- c(...); toString(names(v1)[v1 == 1])}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.