从R中的整数列创建分类值列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从R中的整数列创建分类值列相关的知识,希望对你有一定的参考价值。
我是R的新手,但我还没有找到一个简单的解决方案。举个例子,我有以下数据帧:
case <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
areas <- c(1,2,1,1,1,2,2,2,2,1,1,2,2,2,1,1,1,2,2,2)
A <- c(1,2,11,12,20,21,26,43,43,47,48,59,63,64,65,66,67,83,90,91)
var <- c(1,1,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,0)
outcome <- c(1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0)
df <- data.frame(case,areas,A,var,outcome)
case areas A var outcome
1 1 1 1 1 1
2 2 2 2 1 0
3 3 1 11 0 0
4 4 1 12 0 0
5 5 1 20 0 0
6 6 2 21 1 0
7 7 2 26 1 0
8 8 2 43 0 0
9 9 2 43 0 0
10 10 1 47 1 1
11 11 1 48 0 0
12 12 2 59 1 1
13 13 2 63 0 0
14 14 2 64 1 0
15 15 1 65 1 0
16 16 1 66 0 0
17 17 1 67 0 0
18 18 2 83 0 1
19 19 2 90 0 0
20 20 2 91 0 0
在'A'列中,我们有很多整数,我想创建一个额外的列,按照其成员资格将每个案例分组为以下类别:
<5; 5 - 19; 20 - 49; 50 - 79; 80+
所以列的前3行应该是一个字符串值,表示“<5”,“<5”,“5 - 19”......依此类推,列中的最后一行将是“80+” 。
我可以写出这样的东西,但看起来很草率:
A_groups = ifelse(df$A<5, "<5", df$A)
A_groups = ifelse(df$A>4 & df$A<20, "5-19", A_groups)
A_groups = ifelse(df$A>19 & df$A<50, "20-49", A_groups)
这个的最佳替代方案是什么?
答案
您正在寻找cut()
功能。您希望基于间隔创建一个因子,这是此函数提供的。
df$new_factor <- cut(df$A, breaks = c(-Inf, 5, 20, 50, 80, Inf),
labels = c('<5', '5-19', '20-49', '50-79', '80+'),
right = FALSE)
查看helppage:?cut
,看看为什么我包括right = FALSE
。要仔细检查它是否与您的工作有关,创建一些您不确定的情况总是很好的。例如:使用case == 5
检查right = FALSE
是否有它,看看new_factor
会发生什么。
另一答案
你可以使用cut()
或findInterval()
。
breaks = c(0,5,20,50,80,Inf)
labels = c("<5", "5-19", "20-49", "50-79", "80+")
# Using cut()
df$A_groups = cut(df$A, breaks = breaks, right = FALSE, labels = labels)
# Using findInterval()
df$B_groups = factor(findInterval(df$A, breaks), labels = labels)
以上是关于从R中的整数列创建分类值列的主要内容,如果未能解决你的问题,请参考以下文章