使用带有if条件的for循环创建新向量

时间:2015-05-19 21:59:18

标签: r apply mapply

我在R中遇到for循环的问题。如果某个条件适用于数据元素,我需要创建一个新的向量。但是,我只希望R循环遍历数据集的前49列。这是我到目前为止的代码,但R正在返回多个错误消息。

meanedu = c()
count= 0
sum = 0
 ###HV105.01:HV105.49 are the columns for which I want the for loop to run###
for i in ncol(HV105.01:HV105.49) i++) } 
  ###burkina cut is the name of the dataset. I want the for loop to run for all rows###
     for (j in nrow(burkinacut) j++) { 
##defining a new variable age which is the position [1,1] in my dataset### 
         age = burkinacut[i,j]
         if (age >= 25) {
##if age>=25 create a new vector adult edu which is the value 49 spaces to the right from the current data element##
            adultedu= (i, j+49)
            sum = sum + adultedu ###sum this vector###
            count= count++
         }
    }
}

我很感激有关如何运行此代码的任何建议。我试图解释解释我希望做的事情。从我所做的研究来看,apply,lapply或mapply函数可能是最好用的,但我不明白如何在这种情况下使用它们。

1 个答案:

答案 0 :(得分:0)

我建议采用不同的方法处理你的问题。

首先,让我们生成一个样本数据集:

set.seed(2015) # make sure the example is reproducible

# create a sample data set
d <- as.data.frame(matrix(sample(20:40,20,replace=T),nrow=4))
#   V1 V2 V3 V4 V5
# 1 21 22 33 20 25
# 2 37 27 30 28 21
# 3 26 30 34 35 37
# 4 20 21 28 38 28

为简单起见,我假设您对前四列感兴趣。另外,我假设数据集没有NA值。

您可以创建满足所需条件的元素的布尔掩码矩阵:

bm <- (d >= 25 & col(d) <= 4)
#         V1    V2   V3    V4    V5
# [1,] FALSE FALSE TRUE FALSE FALSE
# [2,]  TRUE  TRUE TRUE  TRUE FALSE
# [3,]  TRUE  TRUE TRUE  TRUE FALSE
# [4,] FALSE FALSE TRUE  TRUE FALSE

然后,bm可用于仅对感兴趣的元素进行子集化:

d[bm]
#[1] 37 26 27 30 33 30 34 28 28 35 38

计算总和将是微不足道的:

sum(d[bm])
# [1] 346

或元素数量:

length(d[bm])
# [1] 11

希望它有所帮助。