R 通过循环在数据帧中的特定列上运行计算
以下是数据示例:R 通过循环在数据帧中的特定列上运行计算,r,loops,dataframe,subset,R,Loops,Dataframe,Subset,以下是数据示例: Test.Statistic P FDR_P Bonferroni_P Control_mean NH4._mean 1 8.203199 0.01654619 0.7405529 1 0.00 0.000000 2 7.622793 0.02211727 0.7405529 1 0.00 1.095238 3 7.501205 0.
Test.Statistic P FDR_P Bonferroni_P Control_mean NH4._mean
1 8.203199 0.01654619 0.7405529 1 0.00 0.000000
2 7.622793 0.02211727 0.7405529 1 0.00 1.095238
3 7.501205 0.02350357 0.7405529 1 2.10 1.761905
4 6.510000 0.03858082 0.7405529 1 0.85 0.000000
5 6.149339 0.04620490 0.7405529 1 0.65 5.095238
6 6.052381 0.04850005 0.7405529 1 0.00 1.428571
NO3._mean
1 0.4285714
2 1.1904762
3 1.1428571
4 0.0000000
5 3.4285714
6 0.0000000
我想将公式trt_mean/control_mean-1应用于每个处理柱NH4和NO3。我加入了一些评论,但在dt中调用第1列control_mean时仍然有困难
dt <- as.data.frame.table(kw_res)
cols <- grep("_mean", colnames(dt))
rel_abund_function <- function(z) {
return((z / z[, 1])-1)
}
dt[, lapply(cols, rel_abund_function)]
有什么建议吗?类似这样的建议,也许:
library(data.table)
dt <- as.data.table(mtcars)
colnames(dt) <- c(sapply(1:5, function(z) paste("ctrl",z,sep="")),
sapply(1:5, function(z) paste("treatment",z,"_mean", sep="")),
"rawval")
代码
获取具有特定名称格式的列(在本例中是指),并应用自定义函数:
cols <- grep("_mean", colnames(dt))
my_mean_func <- function(z){
return((z-mean(z))/100)
}
dt[, lapply(.SD, my_mean_func), .SDcols = cols]
您能发布一些示例数据吗?请提供一个可复制的示例供我们使用,并发布所述示例的预期输出。您可以使用dputheaddf显示一些数据。我认为我的思路是正确的,您能帮助我解决调用control_mean列的问题吗?@Becca我可以尝试提供帮助,但您能否提供一个适当的示例,说明您看到的内容以及您希望作为输出的内容?目前还不是很清楚。另外,请对原始数据使用dputdata\u frame\u名称,这样可以更容易地读入R。对于输出,如果要粘贴它,也可以。
cols <- grep("_mean", colnames(dt))
my_mean_func <- function(z){
return((z-mean(z))/100)
}
dt[, lapply(.SD, my_mean_func), .SDcols = cols]
> head(dt[, lapply(.SD, my_mean_func), .SDcols = cols])
treatment1_mean treatment2_mean treatment3_mean treatment4_mean treatment5_mean
1: -0.0059725 -0.0138875 -0.004375 0.0059375 0.003125
2: -0.0034225 -0.0082875 -0.004375 0.0059375 0.003125
3: -0.0089725 0.0076125 0.005625 0.0059375 0.003125
4: -0.0000225 0.0159125 0.005625 -0.0040625 -0.006875
5: 0.0022275 -0.0082875 -0.004375 -0.0040625 -0.006875
6: 0.0024275 0.0237125 0.005625 -0.0040625 -0.006875