我需要一个功能,将每x列的列识别为一个单独的站点。所以在下面的df1中有8列,其中4个站点各有2个变量。以前,我使用了这样的程序,如Selecting column sequences and creating variables所述。
set.seed(24)
df1 <- as.data.frame(matrix(sample(0:20, 8*10, replace=TRUE), ncol=8))
然后我需要计算列总和,以便获得每个变量的总和。
colsums <- as.data.frame(t(colSums(df1)))
我随后使用这种技术分割了数据帧......
lst1 <- setNames(lapply(split(1:ncol(colsums), as.numeric(gl(ncol(colsums),
2, ncol(colsums)))), function(i) colsums[,i]), paste0('site', 1:4))
list2env(lst1, envir=.GlobalEnv)
组织成一个数据帧...
Combined <- as.matrix(mapply(c,site1,site2,site3,site4))
rownames(Combined) <- c("Site.1","Site.2","Site.3","Site.4")
虽然这种技术在较小的数据帧上非常出色,但是在有大量站点(> 500)的情况下,在mapply函数之后键入每个站点会占用大量代码并且可能导致某些站点错过我正在手动输入所有内容。在colsums阶段之后是否有一种简单的方法可以克服这个问题?
答案 0 :(得分:2)
矩阵是具有维度的向量。矩阵以R列中的列主要顺序存储。
致电matrix(colsums, nrow=2)
应该会对你有所帮助。
注意:污染“全球”环境通常是一个坏主意。