Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过循环在数据帧中的特定列上运行计算_R_Loops_Dataframe_Subset - Fatal编程技术网

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