R数据帧,带条件的新向量

R数据帧,带条件的新向量,r,conditional-statements,R,Conditional Statements,你好,我是R的新手,我需要一些帮助 我有这样的数据 ID Age Sex A01 30 m A02 35 f B03 45 m C99 50 m ... if data1$age <30 then Group is = 1 else if data1$age >=30 and data1$age <40 then Group = 2 else if data1$age >=40 and data1$age <50 then Group = 3 else data1

你好,我是R的新手,我需要一些帮助

我有这样的数据

ID Age Sex
A01 30 m
A02 35 f
B03 45 m
C99 50 m
...
if data1$age <30 then Group is = 1
else if data1$age >=30 and data1$age <40 then Group = 2
else if data1$age >=40 and data1$age <50 then Group = 3
else data1$age >=50 group = 4


 ID Age Sex Group
A01 30  m   2
A02 35  f   2
B03 45  m   3
C99 50  m   4
我想创建一个新的列组,条件如下

ID Age Sex
A01 30 m
A02 35 f
B03 45 m
C99 50 m
...
if data1$age <30 then Group is = 1
else if data1$age >=30 and data1$age <40 then Group = 2
else if data1$age >=40 and data1$age <50 then Group = 3
else data1$age >=50 group = 4


 ID Age Sex Group
A01 30  m   2
A02 35  f   2
B03 45  m   3
C99 50  m   4
如果data1$age=30,data1$age=40,data1$age=50组=4
ID年龄性别组
A01 30平方米
A02 35 f 2
B03 45m3
C99 50米4

如何在R中做到这一点?

一些好的老式基础R将对您的问题有用:

data1 <- data.frame(ID=c("A01", "A02", "B03", "C99"),
                    Age=c(30, 35, 45, 50),
                    Sex=c("m", "f", "m", "m"))

data1$Group[data1$Age < 30] <- 1
data1$Group[data1$Age >= 30 & data1$Age < 40] <- 2
data1$Group[data1$Age >= 40 & data1$Age < 50] <- 3
data1$Group[data1$Age >= 50] <- 4

> data1
   ID Age Sex Group
1 A01  30   m     2
2 A02  35   f     2
3 B03  45   m     2
4 C99  50   m     4

data1一些好的老式Base R会对您的问题有用:

data1 <- data.frame(ID=c("A01", "A02", "B03", "C99"),
                    Age=c(30, 35, 45, 50),
                    Sex=c("m", "f", "m", "m"))

data1$Group[data1$Age < 30] <- 1
data1$Group[data1$Age >= 30 & data1$Age < 40] <- 2
data1$Group[data1$Age >= 40 & data1$Age < 50] <- 3
data1$Group[data1$Age >= 50] <- 4

> data1
   ID Age Sex Group
1 A01  30   m     2
2 A02  35   f     2
3 B03  45   m     2
4 C99  50   m     4

data1您可以尝试
findInterval
,它可以这样使用(使用@Tim的示例数据):


您可以尝试
findInterval
,它可以这样使用(使用@Tim的示例数据):


我们也可以使用
cut

cut(data1$Age, c(0,seq(30,50,10),Inf), right=FALSE, labels=FALSE)
#[1] 2 2 3 4

编辑:基于@thelatemail的评论。

我们也可以使用
cut

cut(data1$Age, c(0,seq(30,50,10),Inf), right=FALSE, labels=FALSE)
#[1] 2 2 3 4

编辑:基于@thelatemail的评论。

是的,但当我应用您的代码时出现了一些错误,工作不正常,第3组覆盖第1组和第2组。。。我不明白,我只是用一个扩展(随机)数据集测试了我的代码,效果很好。请公布你的准确错误。例如,根据我的测试,20岁的人属于第3组。我认为你做错了什么。我还使用我的样本数据测试了@Ananda给出的答案,它是有效的。这是一个常见的错误,我做这件事的次数比我希望的要多:-)是的,但当我应用你的代码时,有些事情是错误的,工作不正常,第3组覆盖第1组和第2组。。。我不明白,我只是用一个扩展(随机)数据集测试了我的代码,效果很好。请公布你的准确错误。例如,根据我的测试,20岁的人属于第3组。我认为你做错了什么。我还使用我的样本数据测试了@Ananda给出的答案,它是有效的。这是一个常见的错误,我做这件事的次数比我希望的要多:-)
cut(data1$Age,c(0,seq(30,50,10),Inf),right=FALSE,labels=FALSE)
应该覆盖它吗?
cut(data1$Age,c(0,seq(30,50,10),Inf),right=FALSE,labels=FALSE)
应该覆盖它吗?