2017-02-07 2 views
0

Мой набор данных состоит из ответов об опросах в колледже с такими столбцами, как «Карьера» и «Q1.a», где первая является принадлежностью колледжа (например, «Мед» или «Мед», Bus "или" UCol "), а последний записывает ответ участника на этот конкретный вопрос.R: Группа по условию + Изменить значения столбцов группы

Учитывая разнообразие вариантов карьеры, я хотел бы сгруппировать их так, чтобы все карьеры, начинающиеся с «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, Град и отдых вместе, но это не похоже на работу. В частности,

new_data <- rbind(Ucol, Grad, Rest) 

Но

summary(new_data) 

уступает только

Class :character 

, который не является полезным.

Итак, мой вопрос: как группировать по условию, а затем изменять имена этих сгруппированных значений столбцов?

+1

я понял, что мог бы сделать Ucol $ Карьера = as.factor ("UCOL"), но спасибо @ joel.wilson за сжатое ответ. – chunjy92

ответ

0

предполагая df в качестве исходного dataframe: попробуйте следующий код:

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 
+0

@ chunjy92 вы проверили реальные данные? я фактически только что отправил код без проверки, так как вы не имели никаких данных. –

+0

работает как шарм :) Спасибо! – chunjy92

Смежные вопросы