2014-12-12 6 views
1

У меня есть следующий список крупных dataframes Cy3list<-c(AllCy3MeansDNA1bind1uM,AllCy3MeansDNA2bind1uM,AllCy3MeansDNA1bind10nM)Применение функции над несколькими базами данных

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

'Cy3list<-c(AllCy3MeansDNA1bind1uM,AllCy3MeansDNA2bind1uM,AllCy3MeansDNA1bind10nM) 
    lapply(Cy3list,function(x){ 
    x["Molarity"]<-as.numeric(x["Molarity"]) 
    x["Molarity"]<-order(x["Molarity"]) 
return(x) 
    })' 

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

"10" "100" "25" "5" "50" "10" "100"
"25", «5 «50» «10» «100» «25» «5»
«50» «10» «100» «25» «5» «50» «Управление» «Управление» «Управление» «Управление»

Обратите внимание, что по первому номеру не целое число. Любая помощь будет оценена по достоинству. Спасибо

ответ

0

Вы можете сделать это с помощью этого:

Построить свои данные:

AllCy3MeansDNA1bind1uM <- data.frame(Molarity=c("10" ,"100", "25", "5" ,"50", "10" ,"100", 
               "25", "5", "50", "10", "100", "25", "5", 
               "50", "10", "100", "25", "5", "50", "Control", "Control", "Control", 
               "Control"), fake_col = rep(1,24) , stringsAsFactors=F) 

AllCy3MeansDNA2bind1uM <- data.frame(Molarity=c("10" ,"100", "25", "5" ,"50", "10" ,"100", 
               "25", "5", "50", "10", "100", "25", "5", 
               "50", "10", "100", "25", "5", "50", "Control", "Control", "Control", 
               "Control"), fake_col = rep(1,24), stringsAsFactors=F) 


AllCy3MeansDNA1bind10nM <- data.frame(Molarity=c("10" ,"100", "25", "5" ,"50", "10" ,"100", 
               "25", "5", "50", "10", "100", "25", "5", 
               "50", "10", "100", "25", "5", "50", "Control", "Control", "Control", 
               "Control"), fake_col = rep(1,24), stringsAsFactors=F) 

хранить их в списке (обратите внимание, что я использую функцию list не c)

Cy3list<-list(AllCy3MeansDNA1bind1uM=AllCy3MeansDNA1bind1uM,AllCy3MeansDNA2bind1uM=AllCy3MeansDNA2bind1uM, 
       AllCy3MeansDNA1bind10nM=AllCy3MeansDNA1bind10nM) 

Тогда попробуйте это function:

library(gtools) #you need to load this library for mixedsort 
new_df<-lapply(Cy3list,function(x) { 
    x["Molarity"]<-mixedsort(x[["Molarity"]]) #notice the double brackets 
    return(x) 
}) 

Я не знаю, нужно ли иметь числовые данные в столбце Molarity (не имеет смысла, когда у вас есть также и данные символа). Если вам действительно нужно, то используйте это:

x["Molarity"]<- as.numeric(mixedsort(x[["Molarity"]])) 

в цикле, но обратите внимание, что все ваши символьные данные будут преобразованы в НС, и вы будете получать соответствующее предупреждение тоже.

Validate, что код работает:

> new_df$AllCy3MeansDNA1bind1uM[['Molarity']] 
[1] "5"  "5"  "5"  "5"  "10"  "10"  "10"  "10"  "25"  "25"  "25"  
[12] "25"  "50"  "50"  "50"  "50"  "100"  "100"  "100"  "100"  "Control" "Control" 
[23] "Control" "Control" 

Колонны прописал!

Надеюсь, это поможет!

+0

Блестяще спасибо! У меня есть несколько вопросов. Почему вы используете «=» вместо «,» при создании списка – MRF

+0

Нет проблем. Я рад, что помог. Вы должны иметь '=', чтобы передавать имена в свой список. – LyzandeR

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