gpt4 book ai didi

r - 循环,使用条件创建新变量作为现有变量的函数

转载 作者:行者123 更新时间:2023-12-04 11:17:47 24 4
gpt4 key购买 nike

我有一些包含 400 多列和 ~80 个观察值的数据。我想使用 for 循环遍历每一列,如果它包含所需的前缀 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)
}
}

我对这是做什么的理解:
  • 遍历列名向量
  • 如果子字符串“exp_”在 colnames 向量的第 i 个元素中 == TRUE
  • 在数据集中创建一个新列,它是 colnames 向量的第 i 个元素除以引用类别(学生),并在末尾附加“_pp”
  • 否则什么都不做

  • 我想,由于我的代码执行没有错误,但没有做任何事情,我的问题出在 if() 语句中,但我无法弄清楚我做错了什么。我还尝试在 if() 语句中添加“==TRUE”,但结果相同。

    最佳答案

    几乎正确,您没有定义循环的长度,所以什么也没发生。尝试这个:

    for (i in 1:length(colnames(test))) {
    if(grepl("exp_", colnames(test)[i])) {
    test[paste(i,"pp", sep="_")] <- test[i] / test$pupils
    }
    }

    关于r - 循环,使用条件创建新变量作为现有变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663059/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com