2015-06-02 5 views
0

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

# simplified test data # 
df1<-as.data.frame(c("M","F")) 
colnames(df1)<-"M1" 

# my function # 
rename_cols<-function(df){ 
    colnames(df)[names(df) == "M1"] <- "sex" 
} 
rename_cols(df1) 

Однако при тестировании этой функции df1, столбец всегда называется «M1» вместо «секс». Как я могу это исправить?

РЕШЕНИЕ - БЛАГОДАРЯ DAVID Аренберг

rename_cols<-function(df){ 
    colnames(df)[names(df) == "M1"] <- "sex" 
    df 
} 
df1<-rename_cols(df1) 
+0

Вы пробовали что-то тону «имена (df1) [grepl (« M1 », names (df1)] <-« sex »'? Это найдет имя столбца «M1» и заменит его « sex ". –

+3

Функции работают во временной среде. Ваш код работает, но во временном наборе данных, который затем исчезает. Если вы хотите вернуть набор данных с именами переименованных столбцов, вам нужно добавить дополнительную строку в свою функцию, которая будет иметь 'df' в нем (это означает, что вы хотите, чтобы функция давала вам временные данные, а не стирала их при выходе). Хотя он все равно создаст копию и не изменит ваш исходный набор данных. Интересно, как вы хотите запустить эту функцию на нескольких наборах данных. Можете ли вы предоставить более общий пример и желаемый результат? –

+0

Роман - это альтернатива, но она остается во временной среде. Дэвид - Спасибо, я добавил это выше. – user2568648

ответ

1

Вот еще одно решение, которое позволяет обойти проблему функций, работающих во временном пространстве:

df <- as.data.frame(c("M","F")) 
colnames(df) <- "M1" 

rename_cols <- function(df) { 
    colnames(df)[names(df) == "M1"] <<- "sex" 
} 

> rename_cols(df)   # this will operate directly on the 'df' object 
> df 
    sex 
1 M 
2 F 

Использование глобального оператора присваивания <<- делает имя изменения во входном кадре данных df «палка». Конечно, это решение не идеально, потому что это означает, что функция может потенциально сделать что-то нежелательное. Но я чувствую, что это в духе того, что вы пытались сделать изначально.

+0

@DavidArenburg Пожалуйста, просмотрите этот ответ и сообщите нам, что вы думаете. –

+0

Не уверен ... Я бы так не сделал, но я думаю, это зависит от вас/OP –