用关系运算符!=设置子集

时间:2019-02-20 09:19:56

标签: r subset

我有一个包含不同列的数据框df。

df$xyz列中,我大约有20个字符变量。 我想保留3个变量("HL%", "HH$", "LL$"),所有其他变量("truncated", "kk$", "hhb"...)应替换为"other"

那是我的数据框:

xz   xyz 
2.5  HL%
4.4  HH$
9.3  kk$
2.4  kk$
4.5  LL$
5.6  truncated    

我需要:

xz   xyz 
2.5  HL%
4.4  HH$
9.3  other
2.4  other
4.5  LL$
5.6  other

我尝试过:

df$xyz[df$xyz!="HL%"|
         df$xyz!="HH$"|
         df$xyz!="LL$"] <- "other"

这似乎并不能解决问题。

1 个答案:

答案 0 :(得分:0)

正如@nya在评论中所述,您的df$xyz可能是一个因素变量,请与str(df)进行核对。

str(df)
# 'data.frame': 6 obs. of  2 variables:
#  $ xz : num  2.5 4.4 9.3 2.4 4.5 5.6
#  $ xyz: Factor w/ 6 levels "HH$","HL%","kk$",..: 2 1 6 6 4 6

在这种情况下,请首先使用您引入的新级别"other"更新因子级别。否则,请跳过此步骤。

levels(df$xyz) <- c(levels(df$xyz), "other")

那之后就做。

df$xyz[-which(df$xyz %in% c("HL%", "HH$", "LL$"))] <- "other"

您的方法也可以使用,但是您需要将|替换为&