提问人:MetabO 提问时间:7/23/2023 最后编辑:MarkMetabO 更新时间:7/24/2023 访问量:42
因式分解变量
Factorizing a variable
问:
我正在尝试对一个变量进行因式分解,该变量基本上是一个人吃了多少种食物的计数。我的代码出现错误,我不确定如何解决此问题。
总数与食物计数是连续变量
Foods$count_quintile <- factor(Foods$Totals, levels = 1:5,
labels = c("Q1", "Q2", "Q3", "Q4", "Q5"))
在我运行这个之后,count_quintile仍然是空的。
思潮?
答:
0赞
Mark
7/24/2023
#1
简短的回答:
您需要对 Totals 列数据进行舍入,以便它适合您尝试创建的因子变量的 bin。
更长的答案:
在您的问题中,您说“总计与食物计数是连续变量”。创建连续的示例数据:
set.seed(0)
Foods <- data.frame(
Totals = rnorm(7, 2.5, 1)
)
Totals
1 3.762954
2 2.173767
3 3.829799
4 3.772429
5 2.914641
6 0.960050
7 1.571433
正如你所看到的,每个值都是介于 0 和 5 之间的分数,每个数字都有如此多的小数位,以至于它们中的任何一个都不太可能完全是整数。
在 中,该部分是说输入数据用数字 1 到 5 编码;第一类是,第二类是,第三类,以此类推。factor(Foods$Totals, levels = 1:5, labels = c("Q1", "Q2", "Q3", "Q4", "Q5"))
levels = 1:5
1
2
3
因此,当它查看我们在上面看到的 Total 列数据时,它没有看到任何这些值,它会返回 NA。然后重复,创建一列 NA。
为了让它起作用,(假设四舍五入 Total 适合您的数据!)您可以四舍五入到最接近的值,然后代码将起作用:
Foods$count_quintile <- factor(round(Foods$Totals), levels = 1:5, labels = c("Q1", "Q2", "Q3", "Q4", "Q5"))
Totals count_quintile
1 3.762954 Q4
2 2.173767 Q2
3 3.829799 Q4
4 3.772429 Q4
5 2.914641 Q3
6 0.960050 Q1
7 1.571433 Q2
0赞
jay.sf
7/24/2023
#2
factor
不是很合适的功能。显然,您正在寻找可以使用或任何方式指定五分位数的 .cut()
quantile()
breaks=
Foods <- transform(Foods,
count_quintile=cut(Totals,
breaks=quantile(Totals, seq.int(0, 1, length.out=6)),
include.lowest=TRUE,
labels=paste0('Q', 1:5)))
str(Foods$count_quintile)
# Factor w/ 5 levels "Q1","Q2","Q3",..: 5 3 4 3 1 1 5 5 3 1 ...
head(Foods)
# foo Totals bar count_quintile
# 1 1.3709584 17 0.5131505 Q5
# 2 -0.5646982 11 0.4687138 Q3
# 3 0.3631284 13 0.4058770 Q4
# 4 0.6328626 11 0.7304523 Q3
# 5 0.4042683 6 0.6039375 Q1
# 6 -0.1061245 6 0.8713164 Q1
我们可以做一个交叉检查:
with(Foods, tapply(Totals, count_quintile, max))
# Q1 Q2 Q3 Q4 Q5
# 7 9 11 13 21
with(Foods, quantile(Totals, seq.int(0, 1, length.out=6)))
# 0% 20% 40% 60% 80% 100%
# 2 7 9 11 13 21
数据:
Foods <- n <- 1000; set.seed(42); Foods <- data.frame(foo=rnorm(n), Totals=rpois(n, 10), bar=runif(n))
评论
dput(Foods)