我有調查答覆的數據框,其中一些列是參與者可以選擇多個答案的問題(「選擇所有適用的答案」)。將「選擇所有適用的選項」轉換爲二進制選項
> age <- c(24, 28, 44, 55, 53)
> ethnicity <- c("ngoni", "bemba", "lozi tonga", "bemba tonga other", "bemba tongi")
> ethnicity_other <- c(NA, NA, "luvale", NA, NA)
> df <- data.frame(age, ethnicity, ethnicity_other)
我想被設置爲二進制響應項這些問題,使得每個的響應選擇(在這種情況下ethnicity
和ethnicity_other
)變得與列向量0或者爲1。
到目前爲止,我寫分開單獨的唯一反應腳本到一個列表(z
):
> x <- unique(as.vector(unlist(strsplit(as.character(df$ethnicity_other), " ")), mode="list"))
> y <- unique(as.vector(unlist(strsplit(as.character(df$ethnicity), " ")), mode="list"))
>
> combine <- c(x, y)
>
> z <- NULL
> for(i in combine){
> if(!is.na(i)){
> z <- append(z, i)
> }
> }
我然後從列表中創建新的專欄,並與NA值填滿了。
> for(elm in z){
> df[paste0("ethnicity_",elm)] <- NA
> }
所以現在我有35個,我想,以填補一和零,這取決於該列名(或列名的一部分,因爲我ethnicity_
前綴的話)可以在發現附加列在ethnicity
或ethnicity_other.
下的相應單元格我試圖用一些方法刺穿它,沒有很好的解決方案。
哇,這太棒了。非常感謝。我有點不清楚ddply函數是如何工作的(函數(x)...?),但我會稍微修改一下。我也試着讓每列都以「ethnicity_」爲前綴。在我的嘗試中,我在創建列名時使用了粘貼功能,但我很難理解在第一個解釋中列創建過程發生的位置。再次感謝!! – chrisnyoder
@chrisnyoder'ddply'通過'id'變量(在這種情況下,只是每一行)分割數據,然後將該函數應用於每一條數據。所以函數'x'的輸入將是一行'data.frame'。試試'ddply(df,。(id),function(x)browser())'來探索函數的環境。爲了設置列名,最簡單的解決方案是在運行後執行此操作(例如,'out < - ddply(df,...)'then'names(out)[names(out)!=「id」] < paste0(「ethnicity_」,names(out)[names(out)!=「id」])'。我會在今天晚些時候添加更多這個答案 –