簡體   English   中英

R:使用多個條件重新編碼變量的單個因子

[英]R: Recode a single factor of a variable using multiple conditions

我有一個4個級別的因子變量:

set.seed(1)
d <- sample(1:4,20,replace=TRUE)
df <- factor(d,labels=c("A","B","C","D"))

我想根據另一個變量的值在“ B”和“ D”之間分配“ C”:

df <- as.data.frame(df)
names(df)[names(df)=="df"] <- "var1"
df$var2 <- rnorm(20,5,2)

我以為我可以將“ C” ifelse子集,而ifelse根據某些標准進行ifelse編碼。

df$var1[df$var1=="C"] <- ifelse(df$var1=="C" & df$var2 < 4, "B", "D")

但是R不喜歡它(可能有充分的理由),而是將所有C分配給“ D”。 我懷疑第二個條件不能按預期工作。 即使可行,也可能有一個更有效的解決方案。 思考?

我想,你需要

df$var1[df$var1 == "C"] <- ifelse(df[df$var1 == "C", "var2"] < 4, "B", "D")

這仍將級別C保留在其中。

df$var1
#[1] B B B D A D D D D A A A D B D B D D B D
#Levels: A B C D

您可以使用droplevels刪除未使用的級別

df$var1 <- droplevels(df$var1)

df$var1
#[1] B B B D A D D D D A A A D B D B D D B D
#Levels: A B D

或者只是再次應用factor

df$var1 <- factor(df$var1)

這個怎么樣?

sub.df <- df[df$var1=="C",] # subset you are concerned
sub.df$var1 <- ifelse(sub.df$var2 < 4, "B", "D") # modify
df[df$var1=="C",] <- sub.df # update the subset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM