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)
thanks for your help,
Remko Duursma
____________________________________________________________
Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail!
making a dataframe out of lapply() result
5 messages · Remko Duursma, Spencer Graves, Roger D. Peng +2 more
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))
> tester.L <- split(tester, tester$groups)
> as.data.frame(lapply(tester.L, function(x) x <- unlist(x[1,] )))
A B C
groups 1 2 3
one 1 2 3
two 6 7 8
How's this?
Spencer Graves
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)
thanks for your help,
Remko Duursma
____________________________________________________________ Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail! ______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
You could try:
s <- lapply(tester.L, function(x) x <- x[1,] )
do.call("rbind", s)
-roger
_______________________________
UCLA Department of Statistics
http://www.stat.ucla.edu/~rpeng
On Tue, 15 Apr 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)
thanks for your help,
Remko Duursma
____________________________________________________________ Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail! ______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
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
you can try this,... data.frame(t(sapply(tester.L, function(x) x <- x[1,] ))) Mahbub.
--- Remko Duursma <den.duurs at lycos.com> 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)
thanks for your help,
Remko Duursma
____________________________________________________________
Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail!
______________________________________________ R-help at stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help __________________________________________________ The New Yahoo! Search - Faster. Easier. Bingo