[R] aggregate and list elements of variables in data.frame

Massimo Bressan m@@@|mo@bre@@@n @end|ng |rom @rp@@veneto@|t
Thu Jun 7 15:27:56 CEST 2018


thank you for the help 

this is my solution based on your valuable hint but without the need to pass through the use of a 'tibble' 

x<-data.frame(id=LETTERS[1:10], A=c(123,345,123,678,345,123,789,345,123,789)) 
uA<-unique(x$A) 
idx<-lapply(uA, function(v) which(x$A %in% v)) 
vals<- lapply(idx, function(index) x$id[index]) 
data.frame(unique_A = uA, list_vals=unlist(lapply(vals, paste, collapse = ", "))) 

best 



Da: "Ben Tupper" <btupper using bigelow.org> 
A: "Massimo Bressan" <massimo.bressan using arpa.veneto.it> 
Cc: "r-help" <R-help using r-project.org> 
Inviato: Giovedì, 7 giugno 2018 14:47:55 
Oggetto: Re: [R] aggregate and list elements of variables in data.frame 

Hi, 

Does this do what you want? I had to change the id values to something more obvious. It uses tibbles which allow each variable to be a list. 

library(tibble) 
library(dplyr) 
x <- tibble(id=LETTERS[1:10], 
A=c(123,345,123,678,345,123,789,345,123,789)) 
uA <- unique(x$A) 
idx <- lapply(uA, function(v) which(x$A %in% v)) 
vals <- lapply(idx, function(index) x$id[index]) 

r <- tibble(unique_A = uA, list_idx = idx, list_vals = vals) 


> r 
# A tibble: 4 x 3 
unique_A list_idx list_vals 
<dbl> <list> <list> 
1 123. <int [4]> <chr [4]> 
2 345. <int [3]> <chr [3]> 
3 678. <int [1]> <chr [1]> 
4 789. <int [2]> <chr [2]> 
> r$list_idx[1] 
[[1]] 
[1] 1 3 6 9 

> r$list_vals[1] 
[[1]] 
[1] "A" "C" "F" "I" 


Cheers, 
ben 


	[[alternative HTML version deleted]]




More information about the R-help mailing list