如何 运行 在单个列而不是数据框上运行?
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
大家好,我有两个数据框试图在我的脚本 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