2016-02-12 4 views
0

у меня есть числовой вектор var с именами (выход из predict.cv.glmnet)Сумма столбцов с одинаковыми именами

var<-c(5.74,0.00,0.15,0.00,0.04,0.00,0.00,0.00,1.81,0.00) 
names(var)<- cbind("(Intercept)","as.factor(holiday)1","as.factor(season)2","as.factor(season)3","as.factor(season)4","as.factor(weathersit)2", "as.factor(weathersit)3","windspeed","temp","hum") 

(Intercept) as.factor(holiday)1  as.factor(season)2  as.factor(season)3  as.factor(season)4  as.factor(weathersit)2 
    5.74    0.00     0.15      0.00     0.04     0.00 
as.factor(weathersit)3    windspeed     temp     hum 
      0.00      0.00      1.81     0.00 

Я хочу, чтобы извлечь имена переменных с ненулевыми значениями, а также суммарных уровней факторов (т. е. если хотя бы один уровень фактора отличен от нуля, тогда необходимо включить весь фактор. Выход должен опускать уровни факторов. Я ищу фрагмент кода, который дал бы мне это как результат:

"(Intercept)"  "as.factor(season)"   "temp" 

У меня также есть переменная с именами факторов fac доступны:

fac<-c("as.factor(holiday)","as.factor(season)","as.factor(weathersit)") 


"as.factor(holiday)" "as.factor(season)"  "as.factor(weathersit)" 

и подумывал совокупностей с похожим именем опуская их уровни и проверить, если сумма агрегированных факторов> 0, но я не могу идти о кодировании это.

+0

Пожалуйста, обратите внимание на пример воспроизводимости – Sotos

ответ

0

Я играл с which и регулярными выражениями:

var<-c(5.74,0.00,0.15,0.00,0.04,0.00,0.00,0.00,1.81,0.00) 
names(var)<- cbind("(Intercept)","as.factor(holiday)1","as.factor(season)2","as.factor(season)3","as.factor(season)4","as.factor(weathersit)2", "as.factor(weathersit)3","windspeed","temp","hum") 

X <- names(var)[which(var!=0)] 
n <- grep("as[.]factor.*", X) 
X[n] <- gsub(")[0-9]+$", ")", X[n]) 

X <- unique(X) 
X 

#[1] "(Intercept)"  "as.factor(season)" "temp" 

which выбирает ненулевые компоненты. grep используется для определения индексов факторов. Затем gsub удаляет уровни факторов.

+0

Благодарим вас за ответ. Это делает работу для предоставленного примера. Знаете ли вы, как я мог бы использовать gsub, чтобы обобщить это на случаи, когда уровни факторов не являются числовыми? Предположим, что мои имена переменных теперь: 'names (var) <- cbind (" (Intercept) "," as.factor (holiday) 1 "," as.factor (season) winter "," as.factor (сезон) весна "," as.factor (сезон) лето "," as.factor (weathersit) 2 "," as.factor (weathersit) 3 "," windspeed "," temp "," hum ")' – mknut

+0

Okay Я попробовал 'X [n] <- gsub ("). + $ ",") ", X [n])' и, похоже, все в порядке. – mknut

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