我想在我的数据列中重命名一些值,这些值少于5次。
Var1 Var2
1 A High
2 A High
3 A High
4 B High
5 B Med
6 B Vlow
7 C Vlow
8 C Low
9 C Low
10 C Low
11 A High
12 B Hlow
13 C Med
14 A Low
15 A Low
因此,在这种情况下,我想将Var2
列的值重命名为“other”,其值小于5次(Hlow
,Med
,Vlow
)。预期结果应为:
Var1 Var2
1 A High
2 A High
3 A High
4 B High
5 B Other
6 B Other
7 C Other
8 C Low
9 C Low
10 C Low
11 A High
12 B Other
13 C Other
14 A Low
15 A Low
以下是我的数据框的dput()
:
structure(list(Var1 = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 3L, 1L, 2L, 3L, 1L, 1L), .Label = c("A", "B", "C"), class = "factor"),
Var2 = structure(c(1L, 1L, 1L, 1L, 4L, 5L, 5L, 3L, 3L, 3L,
1L, 2L, 4L, 3L, 3L), .Label = c("High", "Hlow", "Low", "Med",
"Vlow"), class = "factor")), .Names = c("Var1", "Var2"), class = "data.frame", row.names = c(NA,
-15L))
两列都是分类变量(因子)。
答案 0 :(得分:1)
由于Var2
是factor
,您可以使用Hadley的新forcats
套餐:
nlevels_to_keep <- sum(table(df$Var2) >= 5)
df$Var2 <- forcats::fct_lump(df$Var2, n = nlevels_to_keep)
df
# Var1 Var2
#1 A High
#2 A High
#3 A High
#4 B High
#5 B Other
#6 B Other
#7 C Other
#8 C Low
#9 C Low
#10 C Low
#11 A High
#12 B Other
#13 C Other
#14 A Low
#15 A Low
fct_lump()
函数将最少/最常见的级别整合到&#34;其他&#34; 中。参数n
的正值指定保持最常见(&#34;顶部&#34;)n
级别。
要获得要保留的前n个级别,我们必须使用Var2
计算table()
中每个级别的外观。然后我们看看计数等于或大于5的次数。这里,我们使用&#34;技巧&#34;转换为整数时,FALSE
变为0
,TRUE
变为1
。因此,sum()
会返回TRUE
s的数量。
df <- read.table(header = TRUE, text = "Var1 Var2
A High
A High
A High
B High
B Med
B Vlow
C Vlow
C Low
C Low
C Low
A High
B Hlow
C Med
A Low
A Low")
答案 1 :(得分:1)
首先使用table
确定Var2
的哪些值低于您的阈值。
freqs <- table(df[["Var2"]])
lowVals <- names(freqs[freqs < 5])
现在,我们可以使用%in%
将Var2
索引到小于freq
的值,并将其替换为Other
。
df[["Var2"]][df[["Var2"]] %in% lowVals] <- "Other"