我有一些数据,包含400多个列和约80个观测值。我想使用for循环遍历每一列,如果它包含所需的前缀
我第一次尝试时,循环顺利运行,但只存储了if语句为真的最终列,而不是存储每个列中if语句为真的值。我做了一些调整,但失去了那段代码,现在有这个代码,它运行没有错误,但并没有修改数据框。
exp_
,则我想创建一个新列,该值除以一个参考列,存储为相同名称但带有后缀_pp
。我还想使用其他前缀rev_
的else if,但我认为只要解决了第一个问题,我就可以自己解决其余问题。以下是一些示例数据:exp_alpha exp_bravo rev_charlie rev_delta pupils
10 28 38 95 2
24 56 39 24 5
94 50 95 45 3
15 93 72 83 9
72 66 10 12 3
我第一次尝试时,循环顺利运行,但只存储了if语句为真的最终列,而不是存储每个列中if语句为真的值。我做了一些调整,但失去了那段代码,现在有这个代码,它运行没有错误,但并没有修改数据框。
for (i in colnames(test)) {
if(grepl("exp_", colnames(test)[i])) {
test[paste(i,"pp", sep="_")] <- test[i] / test$pupils)
}
}
我的理解是:
- 循环遍历列名的向量
- 如果第i个元素中包含子字符串“exp_”,则返回TRUE
- 在数据集中创建一个新列,该列是列名向量的第i个元素除以参考类别(学生),并在末尾添加“_pp”
- 否则不执行任何操作
我想,由于代码没有报错但是没有执行任何操作,我的问题可能在if()语句中,但我无法找出我的错误。我还尝试在if()语句中添加“== TRUE”,但结果相同。