2013-07-16 3 views
0

Учитывая данные, что выглядит следующим образом:Объединить несколько строк переменных

Year<-c(1,1,1,1,2,2,2,2,3,3,3,3) 
Tax<-c('A','B','C','D','A','B','C','D','A','B','C','D') 
Count<-c(1,2,1,2,1,2,1,1,1,2,1,1) 
Dummy<-data.frame(Year,Tax,Count) 

Dummy 
    Year Tax Count 
1 1 A  1 
2 1 B  2 
3 1 C  1 
4 1 D  2 
5 2 A  1 
6 2 B  2 
7 2 C  1 
8 2 D  1 
9 3 A  1 
10 3 B  2 
11 3 C  1 
12 3 D  1 

Как будет идти об объединении некоторых «НК» элементы-, например, если бы я хотел, чтобы объединить A, B, C в новый переменная «ABC». Мой конечный результат должен выглядеть следующим образом

Year Tax Count 
    1 ABC 4 
    1 D 2 
    2 ABC 4 
    2 D 1 
    3 ABC 4 
    3 D 1 
+0

ABC называется переменной? – Metrics

ответ

3

Другой plyr решение. Просто переопределите переменную Tax и выполните обычное резюме.

ddply(within(Dummy, { 
    Tax <- ifelse(Tax %in% c('A','B','C'), 'ABC', 'D') 
}), .(Year, Tax), summarise, Count=sum(Count)) 

Если вы не имеете plyr (или не нравится (!)), Эта проблема достаточно проста в обращении в базе R прямым путем.

aggregate(Count ~ Year + Tax, within(Dummy, { 
    Tax <- ifelse(Tax %in% c('A','B','C'), 'ABC', 'D') 
}), sum) 
1

Здесь вариант с использованием ddply

ddply(Dummy,.(Year),summarise, 
      Tax=c(Reduce(paste0,head(Tax,-1)),as.character(tail(Tax,1))), 
      Count=c(sum(head(Count,-1)),tail(Count,1))) 

Year Tax Count 
1 1 ABC  4 
2 1 D  2 
3 2 ABC  4 
4 2 D  1 
5 3 ABC  4 
6 3 D  1 
1

Хорошо, вот гораздо лучшее решение, чем мое оригинальное. Нет пустых данных, нет rbind ing, но он все равно может иметь дело с произвольными группами:

groups_list = list(c("A", "B", "C"), "D") 
Dummy$TaxGroup = sapply(Dummy$Tax, function(tax_value) { 
    group_search = sapply(groups_list, function(group) tax_value %in% group) 
    group_num = which(group_search) 
}) 
combined = ddply(
    Dummy, 
    .(Year, TaxGroup), 
    summarize, 
    GroupName=paste(groups_list[[TaxGroup[1]]], sep="", collapse=""), 
    CombinedCount=sum(Count) 
) 
Смежные вопросы