我有一个96行和42372列的矩阵。
我应该在所有列中采用前4行的模式,并将其作为第一行转储到另一个矩阵中。
然后在所有列中采用接下来四行的模式,并将其作为第二行转储到另一个矩阵中。
等等。
新矩阵将包含24行和42372列。
我写了一个函数如下;的 SOURCE: Is there a built-in function for finding the mode?
GetMode <- function(x)
{
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
输出是第一个矩阵。 (96行和42372列)
Output2是新矩阵。 (24行和42372列)
我现在正在尝试
output2[1,]<-GetMode(output[1:4,])
但它是所有列中每行的打印模式,并将其作为新行打印。
答案 0 :(得分:0)
试一试并告诉我它是否适合你:
# Fake Data
output <- matrix(round(runif(96*42372, 1, 40)), nrow = 96, ncol = 42372)
# https://stackoverflow.com/questions/2547402/is-there-a-built-in-function-for-finding-the-mode
GetMode <- function(x){
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
every = 4
output2 <- output; output2[] <- NA
output2 <- sapply(seq(from = 1, to = nrow(output), by = every),
function(i) apply(output[i:(i+(every-1)),], 2, GetMode))
dim(output2)
output2[1:6,1:6]
答案 1 :(得分:0)
您可以使用data.table
包:
library(data.table)
#df0 is the original *"data.frame"*
df1 <- cbind(rep(1:(96/4), each=4), df0) #Add a column for grouping
colnames(df1)[1] <- "id" #Make the col name clean
df1 <- data.table(df1) #Convert to data table
df.mode <- df1[,GetMode(.SD),id] #Get the mode for each group and all columns
<强> 数据:的强>
df0 <- matrix(rep(1:24000, each = 4), nrow = 96, ncol = 100)
df0 <- data.frame(df0)
<强> 功能: 强>
GetMode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}