从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中的整数列创建分类值列的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的整数列中获取前4位数字

如何将工作日中的整数列添加/减去日期时间列?

如何从包含一系列值的列创建新的递增值列?

漫画:什么是桶排序?

创建特征向量以对空中图像中的片段进行分类

如何从片段中调用 getSupportFragmentManager()?