使用 R 根据频率计数替换列中的值
Replace value in a column based on a Frequency Count using R
我有一个包含多列的数据集。其中许多列包含超过 32 个因素,因此对于 运行 随机森林(例如),我想根据它们的频率计数替换列中的值。
其中一栏是这样写的:
$ country
: Factor w/ 92 levels "China","India","USA",..: 30 39 39 20 89 30 16 21 30 30 ...
我想做的是只保留前 N 个(N 是 5 到 20 之间的值)国家,并将剩余的值替换为 "Other"。
我知道如何使用 table 函数计算值的频率,但我似乎无法找到基于这样的规则替换值的解决方案。如何做到这一点?
一些示例数据:
set.seed(1)
x <- factor(sample(1:5,100,prob=c(1,3,4,2,5),replace=TRUE))
table(x)
# 1 2 3 4 5
# 4 26 30 13 27
将除前 3 级(第 2/3/5 级)以外的所有级别替换为 "Other":
levels(x)[rank(table(x)) < 3] <- "Other"
table(x)
#Other 2 3 5
# 17 26 30 27
我有一个包含多列的数据集。其中许多列包含超过 32 个因素,因此对于 运行 随机森林(例如),我想根据它们的频率计数替换列中的值。
其中一栏是这样写的:
$ country
: Factor w/ 92 levels "China","India","USA",..: 30 39 39 20 89 30 16 21 30 30 ...
我想做的是只保留前 N 个(N 是 5 到 20 之间的值)国家,并将剩余的值替换为 "Other"。 我知道如何使用 table 函数计算值的频率,但我似乎无法找到基于这样的规则替换值的解决方案。如何做到这一点?
一些示例数据:
set.seed(1)
x <- factor(sample(1:5,100,prob=c(1,3,4,2,5),replace=TRUE))
table(x)
# 1 2 3 4 5
# 4 26 30 13 27
将除前 3 级(第 2/3/5 级)以外的所有级别替换为 "Other":
levels(x)[rank(table(x)) < 3] <- "Other"
table(x)
#Other 2 3 5
# 17 26 30 27