[R] making a dataframe out of lapply() result
Sundar Dorai-Raj
sundar.dorai-raj at pdf.com
Tue Apr 15 20:57:35 CEST 2003
Remko Duursma wrote:
> Dear R-helpers,
>
> i have a question on how to vectorize this problem:
>
> i have a dataframe:
>
> tester <- data.frame(groups=c("A","A","B","B","C","C"), one=c(1,1,2,2,3,3), two=c(6,6,7,7,8,8))
>
> # i split it into a list
> tester.L <- split(tester, tester$groups)
>
> # And want to keep only the first item in each:
> lapply(tester.L, function(x) x <- x[1,] )
>
>
> How do i make a dataframe out of the last result, which looks like "tester", without looping? (i can use rbind in a for loop, but is rather slow)
>
If you're always trying to get the unique rows, then just use unique():
> tester
groups one two
1 A 1 6
2 A 1 6
3 B 2 7
4 B 2 7
5 C 3 8
6 C 3 8
> unique(tester)
groups one two
1 A 1 6
3 B 2 7
5 C 3 8
Or use do.call("rbind", ...)
> do.call("rbind", lapply(split(tester, tester$group),
+ function(x) x[1, ]))
groups one two
A 1 1 6
B 2 2 7
C 3 3 8
>
Or just for fun:
> tester[which(!duplicated(tester$groups)), ]
groups one two
1 A 1 6
3 B 2 7
5 C 3 8
Regards,
Sundar
More information about the R-help
mailing list