changing column labels for data frames inside a list
On 30 March 2015 at 17:19, Vikram Chhatre <crypticlineage at gmail.com> wrote:
First of all, thank you for all the quick replies. Here is a solution that
worked for me.
mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop',1:12);
return(e)})
head(mylist2[[1]])
pop1 pop2 pop3 pop4 pop5 pop6 pop7 pop8 pop9 pop10 pop11 pop12 L0001.1 0.60 0.500 0.325 0.675 0.600 0.500 0.500 0.375 0.550 0.475 0.350 0.275 L0001.2 0.40 0.500 0.675 0.325 0.400 0.500 0.500 0.625 0.450 0.525 0.650 0.725 While we are at this, I wanted to create a 13th column in each data frame for average of each row.
For new problems you should use a new topic.
# Calculate average myavg <- lapply(mylist2, function(e) rowSums(mylist2)/12) # Attach to the main data frame mylist3 <- cbind(mylist2, myavg)
This does not work the way I imagined it would. The myavg vector is attached directly to mylist2, not to individual dataframes within.
But it works as expected (read ?cbind). You try to cbind two lists (myavg and mylist2). You want to cbind each list object (the data.frames) with each rowSums output. So, use cbind within your first lapply. p.s. Is it a standard convention to always copy the reply to the last
person who responded?
I guess it depends on which answer you refer to.
On Mon, Mar 30, 2015 at 10:56 AM, Sven E. Templer <sven.templer at gmail.com> wrote:
On 30 March 2015 at 16:47, Sarah Goslee <sarah.goslee at gmail.com> wrote:
colnames(e) <- paste0('pop',1:12)
isn't a function and doesn't return anything.
But
function(e){colnames(e) <- paste0('pop', 1:2)}
is a function and it returns something (the last evaluated expression! -
here the paste0 return):
mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop',
1:2)})
mylist2
[[1]] [1] "pop1" "pop2" [[2]] [1] "pop1" "pop2" [[3]] [1] "pop1" "pop2" from ?return: If the end of a function is reached without calling return, the value of the last evaluated expression is returned.
mylist <- list(
+ data.frame(a = runif(10), b = runif(10)), + data.frame(c = runif(10), d = runif(10)), + data.frame(e = runif(10), f = runif(10)))
mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop',
1:2);
e})
colnames(mylist2[[1]])
[1] "pop1" "pop2" Sarah On Mon, Mar 30, 2015 at 9:54 AM, Vikram Chhatre <crypticlineage at gmail.com> wrote:
summary(mygenfreqt)
Length Class Mode dat1.str 59220 -none- numeric dat2.str 59220 -none- numeric dat3.str 59220 -none- numeric
head(mylist[[1]])
1 2 3 4 5 6 7 8 9 10
11
12 L0001.1 0.60 0.500 0.325 0.675 0.600 0.500 0.500 0.375 0.550 0.475
0.350
0.275 L0001.2 0.40 0.500 0.675 0.325 0.400 0.500 0.500 0.625 0.450 0.525
0.650
0.725 I want to change 1:12 to pop1:pop12 mylist<- lapply(mylist, function(e) colnames(e) <-
paste0('pop',1:12))
What this is doing is replacing the data frames with just names pop1:pop12. I just want to replace the column labels. Thanks for any suggestions.
-- Sarah Goslee http://www.functionaldiversity.org
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.