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