【发布时间】:2017-03-03 22:59:19
【问题描述】:
我正在尝试删除 R 中 for 循环中的一些行。条件涉及将其与其下方的行进行比较,因此我无法在括号内进行过滤。
我知道我可以在指定常量时删除一行:dataframe[-2, ]。我只想对变量做同样的事情:dataframe[-x, ]。这是完整的循环:
for (j in 1:(nrow(referrals) - 1)) {
k <- j + 1
if (referrals[j, "Client ID"] == referrals[k, "Client ID"] &
referrals[j, "Provider SubCode"] == referrals[k, "Provider SubCode"]) {
referrals[-k, ]
}
}
代码运行没有任何问题,但没有删除任何行(我知道应该删除一些行)。当然,如果我用常数测试它,它工作正常:referrals[-2, ]。
【问题讨论】:
-
只是运行
referrals[-k,]实际上并没有做任何事情。与 R 中的任何内容一样,如果您想更改对象,则需要对其进行 assign,即referrals <- referrals[-k,]。 -
...尽管如此,我应该指出,即使修复了该部分,我也不清楚这段代码是否会按照您期望的方式运行。
-
当您在一轮中删除行“k”时,在下一轮中,“j”将是您的最后一个“k”。因此,您的数据框不会以您在 for 循环范围中指定的相同行数结束,从而导致
subscript out of bounds错误。所以,正如@joran 所说,你会考虑重新编写你的代码。
标签: r variables row-removal