将列排序为类别

时间:2014-07-25 05:40:27

标签: r

我有一个名称和高度为两列的表格。 我想将6英尺以下,4英尺以下,4英尺到6英尺之间的人分类为高,短和平均。

我正在尝试在R-studio中执行此操作。即使在单独的列中对它们进行分类的方法也很好。

**Name     Height**
 James       5.6
 John        3.7
 Ron         6.8
 Tor         5.2

3 个答案:

答案 0 :(得分:2)

使用,cut

 dat <- structure(list(Name = c("James", "John", "Ron", "Tor"), Height = c(5.6, 
 3.7, 6.8, 5.2)), .Names = c("Name", "Height"), class = "data.frame", row.names = c(NA, 
 -4L))

 dat$class <- with(dat,
                cut(Height, 
                      breaks=c(-Inf,4,6,Inf),labels=c("short", "average", "tall")) )
 dat
#   Name Height   class
# 1 James    5.6 average
# 2  John    3.7   short
# 3   Ron    6.8    tall
# 4   Tor    5.2 average

class(dat$class)
#[1] "factor"

如果您需要“字符”变量,可以选择labels=F

  dat$class <- with(dat, c("short","average", "tall")[cut(Height,breaks=c(-Inf,4,6,Inf), labels=F)])

class(dat$class)
#[1] "character"

答案 1 :(得分:2)

cut是一种方式,但它确实给你一个因素。另一种方式是findInterval并将其作为索引给出一个字符向量:

 c('short','average','tall')[ findInterval(dat$Height, c(-Inf, 4,6,Inf) ) ]

答案 2 :(得分:1)

您的数据:

Name<-c("James", "John", "Ron", "Tor")
Height<-c(5.6,3.7,6.8,5.2)
dat<-data.frame(Name,Height)

您可以通过创建新变量并根据您的条件添加类别来实现此目的:

dat$group<-"average"
dat$group[dat$Height<=4] <-"short" 
dat$group[dat$Height>=6] <-"tall" 


#   Name Height   group
#1 James    5.6 average
#2  John    3.7   short
#3   Ron    6.8    tall
#4   Tor    5.2 average