Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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

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_For Loop_Nested_Dplyr - Fatal编程技术网

R 迭代列名的子集

R 迭代列名的子集,r,loops,for-loop,nested,dplyr,R,Loops,For Loop,Nested,Dplyr,我不熟悉R,但这里我有一个包含多个条件测量值的数据框架,我想在相同条件的列上执行嵌套循环,测试它们是否至少有两个真实测量值(不是零),如果是,则计算新数据集中这些特定条件的平均值 > sample <- list(c(8,0,12,5,0,11), c(15,5,0,10,12,13), c(1,1,0,3,0,9), c(11,9,8,0,4,7), c(12,5,5,0,9,0), c(1,7,2,0,8,0)) > sample <-

我不熟悉R,但这里我有一个包含多个条件测量值的数据框架,我想在相同条件的列上执行嵌套循环,测试它们是否至少有两个真实测量值(不是零),如果是,则计算新数据集中这些特定条件的平均值

    > sample <- list(c(8,0,12,5,0,11), c(15,5,0,10,12,13), c(1,1,0,3,0,9), 
      c(11,9,8,0,4,7), c(12,5,5,0,9,0), c(1,7,2,0,8,0))
    > sample <- as.data.frame(sample)
    > colnames(sample) <- c("x.1","x.2","x.3","y.1","y.2","y.3")


   > sample
  x.1 x.2 x.3 y.1 y.2 y.3
1   8  15   1  11  12   1
2   0   5   1   9   5   7
3  12   0   0   8   5   2
4   5  10   3   0   0   0
5   0  12   0   4   9   8
6  11  13   9   7   0   0

我们循环遍历
列表中“x”和“y”列的索引
,获得逻辑矩阵的
行和
,并使用
ifelse
获得
行平均数

data.frame(setNames(lapply(list(grep("^x", names(sample)),
                          grep("^y", names(sample))), function(i) {
                         x1 <- sample[i]
               ifelse(rowSums(x1!=0)>1, rowMeans(x1), 0)}), c("x", "y"))) 
#   x y
#1  8 8
#2  2 7
#3  0 5
#4  6 0
#5  0 7
#6 11 0
data.frame(集合名(lappy)(列表)(grep(^x),名称(示例)),
grep(“^y”,名称(示例)),函数(i){
x11,row表示(x1,0)}),c(“x”,“y”))
#xy
#1  8 8
#2  2 7
#3  0 5
#4  6 0
#5  0 7
#6 11 0

我们定义了
f_rowmean
函数:

f_rowmean <- function(y) apply(y,1, function(x) ifelse(sum(x!=0)>=2, mean(x), 0))
编辑

至于OP的新问题陈述(在注释中),假设您的数据集位于
df1
,那么您可以执行以下操作:

res.cols <- c("CAOV-3 Reg", "CAOV-3 Mod", "OVCAR-3Reg", "OVCAR-4Reg", "VOA1056Reg", 
"VOA4698Reg", "VOA4698Mod", "TOV112DReg", "TOV112DMod", "TOV21G Mod", 
"HCC38 Reg", "HCC38 Mod")

res <- setNames(data.frame(matrix(0,nrow(df1),length(res.cols))), res.cols)
res <- sapply(res.cols, function(x) res[,x] <- f_rowmean(df1[,grep(x, names(df1))]))

res.cols抱歉,我没有澄清这一点,但我的数据集比上面这个虚拟示例大得多。它实际上是由38个测量13个条件的复制测量列组成的,所以我想做一个循环,遍历整个数据帧来创建一个新的数据帧,而不仅仅是x和ylist@Mohere很容易改变这一点抱歉,我没有澄清这一点,但我的数据集比上面这个虚拟示例大得多。它实际上由38个测量13个条件的复制测量列组成,因此我想在整个数据帧中创建一个循环来创建一个新的数据帧,而不仅仅是x和y列表。列名是:“CAOV-3 Reg.1”“CAOV-3 Reg.2”“CAOV-3 Reg.3”“CAOV-3 Mod.1”“CAOVV-3 Mod.2”“CAOVV-3 Mod.3”“OVCAR-3Reg.1”“OVCAR-3Reg.2”“OVCAR-3Reg.3”“OVCAR-4Reg.1”“OVCAR-4Reg.2”“VOA1056Reg.3”“VOA4698Reg.1”“VOA4698Reg.2”“VOA4698Reg.3”“VOA4698Mod.1”“VOA4698Mod.2”“VOA4698Mod.3”“至V112DMOD.1”“至V112DMOD.2”“至V112DMOD.3”“至V21G Reg Reg.2”“至V21G Reg Reg.3”“至21G Mod.21G.21G”“至21G.2”“VG.2”“VG.21”“VG.2”“VG.21”“VG.2”“VG.2”“VG.2”“VGHCC38 Reg.2“HCC38 Mod.1”HCC38 Mod.2“HCC38 Mod.3”,理想情况下,我想创建一个数据帧:>y2[1]“CAOV-3 Reg”“CAOV-3 Mod”“OVCAR-3Reg”“OVCAR-4Reg”“VOA1056Reg”“VOA4698Reg”“VOA4698Mod”[8]“TOV112DReg”“TOV112DMod”“TOV21G Mod”“HCC38 Reg”“HCC38 Mod”工作得非常好。谢谢!
data.frame(x=f_rowmean(sample[,grep("x", names(sample))]), 
           y=f_rowmean(sample[,grep("y", names(sample))]))

   # x y
# 1  8 8
# 2  2 7
# 3  0 5
# 4  6 0
# 5  0 7
# 6 11 0
res.cols <- c("CAOV-3 Reg", "CAOV-3 Mod", "OVCAR-3Reg", "OVCAR-4Reg", "VOA1056Reg", 
"VOA4698Reg", "VOA4698Mod", "TOV112DReg", "TOV112DMod", "TOV21G Mod", 
"HCC38 Reg", "HCC38 Mod")

res <- setNames(data.frame(matrix(0,nrow(df1),length(res.cols))), res.cols)
res <- sapply(res.cols, function(x) res[,x] <- f_rowmean(df1[,grep(x, names(df1))]))