0

我在 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 函数可能是最好用的,但我不明白如何在这种情况下使用它们。

4

1 回答 1

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

希望能帮助到你。

于 2015-05-19T22:37:30.207 回答