2015-08-19 1 views
0

У меня есть данные с фреймами данных с var1, .., var100. Они все числовые и имеют одинаковую длину.Изменить имена переменных в списке и сохранить имена исходных переменных в R

Я помещаю их в список: list1<-list(var1, .., var100).

Теперь я хотел бы дублировать переменные с расширенными именами (var1_trunc,.., var100_trunc), а также сохранять исходные переменные (var1,.., var100). Мне не нужно rename, так как я хочу запустить другую статистику позже для var1 против var1_trunc и так далее.

Я пробовал:

lapply(list1, function(x){ 
    paste(substitute(x),"trunc",sep="_")[x<mean(x)]<<-x 
    paste(substitute(x),"trunc",sep="_")[x>=mean(x)]<<-mean(x) 
    } 

Моя проблема заключается в том, что новые переменные (var1,.., var100) не создаются.

Может быть, я пытаюсь ошибиться?

+0

Если вы хотите создать новые имена переменных 'paste0 (COLNAMES (Дат), '_trunc')' – akrun

ответ

2

Я не понимаю, почему вы поместили их в список, когда у вас есть дата-схема, которая будет легко выполнить ваши сравнения сравнений позже.

Как упоминалось в @akrun, вы можете использовать эту команду для изменения имен.

# example dataframe 
df1 = data.frame(var1 = 1:5, 
       var2 = 11:15) 
df1 

# var1 var2 
# 1 1 11 
# 2 2 12 
# 3 3 13 
# 4 4 14 
# 5 5 15 


# your function 
ff = function(x){ ifelse(x < mean(x), x, mean(x)) } 

# create new dataset by applying function to prevous dataset 
df2 = data.frame(sapply(df1, ff)) 

df2 

# var1 var2 
# 1 1 11 
# 2 2 12 
# 3 3 13 
# 4 3 13 
# 5 3 13 

# change names and combine datasets 
names(df2) = paste0(names(df1),"_trunc") 
df_full = cbind(df1,df2) 

df_full 

# var1 var2 var1_trunc var2_trunc 
# 1 1 11   1   11 
# 2 2 12   2   12 
# 3 3 13   3   13 
# 4 4 14   3   13 
# 5 5 15   3   13 

Используйте подход выше как функция, которая обновляет свои наборы данных:

# your function to update dataset 
UpdateDataset = function(df1){ 

ff = function(x){ ifelse(x < mean(x), x, mean(x)) } # your function to update columns 

df2 = data.frame(sapply(df1, ff)) 

names(df2) = paste0(names(df1),"_trunc") 

df_full = cbind(df1,df2) 

return(df_full) 
           } 


# try a new dataset 
df = data.frame(var1 = 1:10, 
       var2 = 41:50) 
df 

# var1 var2 
# 1  1 41 
# 2  2 42 
# 3  3 43 
# 4  4 44 
# 5  5 45 
# 6  6 46 
# 7  7 47 
# 8  8 48 
# 9  9 49 
# 10 10 50 


UpdateDataset(df) 

# var1 var2 var1_trunc var2_trunc 
# 1  1 41  1.0  41.0 
# 2  2 42  2.0  42.0 
# 3  3 43  3.0  43.0 
# 4  4 44  4.0  44.0 
# 5  5 45  5.0  45.0 
# 6  6 46  5.5  45.5 
# 7  7 47  5.5  45.5 
# 8  8 48  5.5  45.5 
# 9  9 49  5.5  45.5 
# 10 10 50  5.5  45.5 
+0

Спасибо. Это работает. Итак, мне не нужно лапнуть. – Georg

+0

поспешным, извините. Теперь у меня есть переменные с правильными именами. Но как я могу изменить значения 'var1_trunc' condidtional для' var1', 'var2_trunc' condidtional для' var2' и т. Д.? – Georg

+0

Это легко, если вы дадите мне пример. – AntoniosK