如何 运行 在单个列而不是数据框上运行?

How to run function on indivisual columns instead of data frame?

大家好,我有两个数据框试图在我的脚本 1 中使用以下脚本 1 进行引导我正在从数据框一和二中获取行数。我不想从整个数据框中获取行号,而是希望将各个列拆分为一个数据框并删除零值,而不是获取行号而不是使用以下脚本进行引导。因此,尝试使用 script2,因为我是 R 的新手,所以我正在从 for 循环创建单独的数据帧,这让我有点困惑,向它添加 script1 函数的效率如何

请在下面给我建议 我提供的脚本是 运行 脚本 1 和脚本 2 我正在尝试对每个列进行子集创建一个单独的数据框

脚本 1

set.seed(2)
m1 <- matrix(sample(c(0, 1:10), 100, replace = TRUE), 10)
m2 <- matrix(sample(c(0, 1:5), 50, replace = TRUE), 5)
m1 <- as.data.frame(m1)
m2 <- as.data.frame(m2)
nboot <- 1e3

n_m1 <- nrow(m1); n_m2 <- nrow(m2)

temp<- c()
for (j in seq_len(nboot)) {
  boot <- sample(x = seq_len(n_m1), size = n_m2, replace = TRUE)
  value <- colSums(m2)/colSums(m1[boot,])
  temp <- rbind(temp, value)
}
boot_data<- apply(temp, 2, median)

脚本2

for (i in colnames(m1)){
  m1_subset=(m1[m1[[i]] > 0, ])
  m1_subset=m1_subset[i]
  m2_subset=m2[m2[[i]] >0, ]
  m2_subset=m2_subset[i]
  num_m1 <- nrow(m1_subset); n_m2 <- nrow(m2_subset)# after this wanted add above script changing input 
}

如果我没理解错的话,您想在删除 0 值后对每一列分别进行采样和计算。 I. 修改您的代码以处理单个向量而不是数据帧(即,使用 length() 而不是 nrow()sum() 而不是 colSums()。我还建议创建提前为您的结果留空矩阵,并填写 -- 它将被禁食。

temp <- matrix(nrow = nboot, ncol = ncol(m1))
for (i in seq_along(m1)){
  m1_subset = m1[m1[,i] > 0, i]
  m2_subset = m2[m2[,i] > 0, i]
  n_m1 <- length(m1_subset); n_m2 <- length(m2_subset)
  for (j in seq_len(nboot)) {
    boot <- sample(x = seq_len(n_m1), size = n_m2, replace = TRUE)
    temp[j, i] <- sum(m2_subset)/sum(m1_subset[boot])
  }
}
boot_data <- apply(temp, 2, median)
boot_data <- setNames(data.frame(t(boot_data)), names(m1))
boot_data