我有一个名称和高度为两列的表格。 我想将6英尺以下,4英尺以下,4英尺到6英尺之间的人分类为高,短和平均。
我正在尝试在R-studio中执行此操作。即使在单独的列中对它们进行分类的方法也很好。
**Name Height**
James 5.6
John 3.7
Ron 6.8
Tor 5.2
答案 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