数据集可在此处找到:https://www.dropbox.com/s/l7pc11hhiwr8zzn/data.csv?dl=0或MASS库中的“nlschools”。
在这个数据集中,我想添加一个名为SEScat
的额外列,它将SES列中的值索引为低(&lt; = 30),med(30 > nlschools$SEScat <- (pseudo: low if SES <=30, med if 30 < SES <=40, high if SES > 40)
,但我无法找到合适的语法,文档似乎依赖于比我更多的背景知识。
然而,在此之前,我必须制作一个额外的专栏。使用names(nlschools) <- c("lang","IQ","class","GS","SES","COMB","SEScat")
不起作用,因为name属性的长度不够。我不确定如何增加它。
这个问题来自我之前提出的问题,但我认为其他用户将其作为一个单独的问题可能会很方便。我希望没关系。
答案 0 :(得分:0)
这样做的直接方法是循环遍历SES列中的每个单独值(使用for循环)并测试每个值是否适合您的类别(低,中和高)。您可以使用if和else语句来完成此操作。然后将结果写入新创建的列$ SEScat的当前行。
# load data
a <-read.csv('data.csv')
# loop through individual SES values
for (i in a$SES)
{
# check for low
if (i <= 30)
{
# write to new column
a$SEScat = 'low'
# check for mid
} else if (i > 30 && i <= 40)
{
# write to new column
a$SEScat = 'mid'
# check for high
} else
{
# write to new column
a$SEScat = 'high'
}
}
# display data frame
View(a)
答案 1 :(得分:0)
尝试:
> ddf$SEScat = with(ddf, ifelse(SES<=30,'low', ifelse(SES<=40, 'med', 'high')))
> head(ddf)
X lang IQ class GS SES COMB SEScat
1 1 46 15.0 180 29 23 0 low
2 2 45 14.5 180 29 10 0 low
3 3 33 9.5 180 29 15 0 low
4 4 46 11.0 180 29 23 0 low
5 5 20 8.0 180 29 10 0 low
6 6 30 9.5 180 29 10 0 low
>
可以拆分,如下所示:How do I subset/split this table bases on the values of one column in R?