R:按条件分组+修改组列值

时间:2017-02-07 19:28:30

标签: r

我的数据集包括大学的调查回复,其中包括“职业”和“Q1.a”等列,其中前者是大学附属(如“Med”或“Bus”或“UCol”),后者是后者记录参与者对该特定问题的回应。

考虑到各种职业选择,我想对他们进行分组,以便以'U'开头的所有职业被组合在一起代表本科生,而以'G'开头的职业代表毕业生,其余的是其他职业专业学校。动机是看看这些不同的群体如何对调查中的各种问题做出不同的反应。我无法找到一种方法来就地执行此操作,因此我创建了三个不同的数据框并对它们进行了修改,希望以后合并它们。为此,我的天真方法是:

careers <- as.character(df$Career)

Ucol <- df[startsWith(careers,'U'),]
Ucol$Career = "UCOL"

Grad <- df[startsWith(careers,'G'),]
Grad$Career = "GRAD"

Rest <- df[(!startsWith(careers, 'U') & !startsWith(careers, 'G')),]
Rest$Career = "PROF"

我希望我能将Ucol,Grad和Rest结合在一起,但这似乎不起作用。具体地,

new_data <- rbind(Ucol, Grad, Rest)

但是

summary(new_data)

仅产生

Class :character

没用。

所以,我的问题:如何按条件分组,然后修改那些分组列值的名称?

1 个答案:

答案 0 :(得分:0)

假设df为原始数据框:请尝试以下代码:

df$Career <- as.character(df$Career)
df$Career[grepl("^U",df$Career)] <- "UCOL"   # `^U` means starting with U
df$Career[grepl("^G",df$Career)] <- "GRAD"   # grepl gives a logical vector
df$Career[grepl("^[^UG]",df$Career)] <- "PROF" #[^UG] means anything apart from U/G in the start