[英]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.