2013-02-16 2 views
0

У меня есть образец опроса; что-то вроде демографического. Один из столбцов - country (factor) другой - annual income. Теперь, мне нужно рассчитать в среднем по каждой стране и сохранить в новом data.frame с country и соответствующий средний. Это должно быть просто, но я потерян. Данные что-то так, как показано ниже:Манипулирование data.frames

Country Income($) Education ... ... ... 
1. USA 90000  Phd 
2. UK  94000  Undergrad 
3. USA 94000  Highschool 
4. UK  87000  Phd 
5. Russia 77000  Undergrad 
6. Norway 60000  Masters 
7. Korea 90000  Phd 
8. USA 110000  Masters 
. 
. 

Мне нужен конечный результат, как:

USA UK Russia ... 
98000 90000 75000 

Спасибо. Пример

+0

downvote не от меня, но, пожалуйста [прочитать] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) и редактировать свой пост, поскольку он стоит, это, вероятно, будет закрыто. –

+0

@ user1317221_G, выглядит ли он лучше, если это то, что вы имеете в виду. – 700resu

+4

Ответ на этот вопрос находится почти в каждом R-руководстве, которое я видел. Потратьте время, чтобы пройти через один из них полностью, и вы сэкономите себе огромное количество времени в долгосрочной перспективе. – N8TRO

ответ

5

данные:

dat <- read.table(text="Country Income Education 
USA 90000  Phd 
UK  94000  Undergrad 
USA 94000  Highschool 
UK  87000  Phd 
Russia 77000  Undergrad 
Norway 60000  Masters 
Korea 90000  Phd 
USA 110000  Masters",header=TRUE) 

Делайте то, что вы хотите с plyr:

если данные называется dat:

library(plyr) 
newdf <- ddply(dat, .(Country), function(x) Countrymean = mean(x$Income)) 

# newdf <- ddply(dat, .(Country), function(x) data.frame(Income = mean(x$Income))) 

и агрегат:

newdf <- aggregate(Income ~ Country, data = dat, FUN = mean) 

для вывода, который вы показываете в конце, может быть tapply?

tapply(dat$Income, dat$Country, mean) 
+0

Спасибо. У меня есть вопрос. Я попробовал сортировку сейчас и использовал ** newdf <-newdf [order (Income),] ** Но он, похоже, не работает. В нем говорится, что объект «Доход» не найден. У newdf есть другая структура? Я также попытался изменить ** newdf <-newdf [, order (Доход)] **. – 700resu

+0

Я думаю, что вы, вероятно, захотите сделать что-то вроде этого: 'newdf [with (newdf, order (Income)),]' check [this post] (http://stackoverflow.com/a/1296745/1317221) также я добавлена ​​дополнительная строка кода 'ddply', в которой вы можете помочь вам получить« newdf »со средним столбцом« Доход » –

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