R数据帧,带条件的新向量
你好,我是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
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)
应该覆盖它吗?