我需要在我的數據集中產生一些包含來自現有因子變量信息的新因子變量。使用if語句從其他因子變量的水平創建因子變量
在第一種情況下,我需要基於特定變量是否出現在具有超過100個級別的特定變量中來生成二元NewVariable。 我使用重估()從plyr包 也就是說,
NewVar <- if(OldVar1=="helen" | OldVar1=="greg")
{NewVar <-revalue(OldVar1, c("helen"="participant", "greg"="participant"))}
else {NewVar=="nonparticipant"}
其實我是想具體水平摺疊成由新的變量特定水平。正如你可以想象的上述代碼不起作用,但我不明白爲什麼。
在我需要的信息從現有的三個因素變量(OldVar1,OldVar2,OldVar3),以填補在多類別NewVariable的,我運行這段代碼的級別相結合的第二種情況,
NewVariable="OptionA" <- if(OldVar1=="a" & OldVar2=="b" & OldVar3=="c")
我得到一個錯誤「錯誤:意外‘=’在‘OldVar =’ 同樣發生在我刪除的OldVar1的=的==一個」一」
是否有可能創建一個因素NewVariable其水平和標籤沒有提前填寫字符串值?我無法找到的東西,我看到有教程管理他們的數據,他們只需要標記現有的值。
此外,我想給屬於OptionA,OptionB,OptionC等的其他案例賦予值,這樣可以爲它們中的每一個設置不同的if語句,如下所示:
NewVariable="OptionA" <- if(OldVar1=="a" & OldVar2=="b" & OldVar3=="c")
NewVariable="OptionB" <- if(OldVar1=="a" & OldVar2=="d" & OldVar3=="e")
===編輯===
對於第二個「挑戰」我接着迪文 建議的代碼,我生產我的三個變量,我在的,如果(的作用... )以上,並設置內部C()只是我需要,例如
OldVar.ALL.interactions <- with(data, interaction(OldVar1, OldVar2, OldVar3)
levels(OldVar.ALL.interactions) # search for the levels that we need to include
# in the NewVar
# below I follow DWin's code
NewVar <- factor(rep(NA, length(AnotherVarOfTheDataset)),
levels=c("OptionA", "OptionB", ...))
NewVar[OldVar.ALL.interactions %in% c("...interaction.of.Old.Variables...")] <- "OptionA"
# the same as in OptionA for the rest of the levels
# the ** NewVar[ is.na(NewVar) ] <- "nonparticipant" ** of DWin's code is not needed
是否有任何其他的方式來解決這個問題,而無需使用舊的因子變量之間的相互作用的價值?
您不能通過操作levels屬性輕鬆摺疊關卡。我開始做一些像'levels(NewVar)< - gsub(「greg | helen」...)的東西,並意識到這會失敗。如果你想做一個任務,你也不能使用:'else {NewVar ==「nonparticipant」}'。然後是「if」和「else」沒有向量化的問題。 –
看來'plyr :: revalue'會讓你摺疊關卡,所以它可能是錯誤地使用'if'和'else'而不是'ifelse',這是你絆倒你的一部分。 'revalue'也沒有「all.others」=「other_level」參數。 –
「無矢量化」意味着它們不會運行數據集的所有矢量長度?這就是爲什麼諾亞的建議包含一個參數length.out = 10? – Pulse