如何防止R代码中的sprintf错误

时间:2015-04-03 13:19:07

标签: r

我有一个包含多个列的数据框。每当列V2的行值小于20时,列V4中同一行上的字符元素将替换为字符串" sp_NameOfTopElement_NameOfBottomElement"

我的代码:

R10 <- data$V4
positionBefore <- match(R10,R10)
itemBefore <- R10[c(NA, positionBefore)]

R10 <- rev(data$V4))
positionAfter <- match(R10, R10)-1
itemAfter <- rev(R10[c(NA, positionAfter)])

cond <- if data$V2 < 20
data$R10[cond] <- sprintf("sp_%s-%s", itemBefore[cond], itemAfter[cond])

运行我的代码后,我收到以下错误:

Error in sprintf("sp_%s-%s", itemBefore[cond], itemAfter[cond]) :
arguments cannot be recycled to the same length

检查我的变量:

NROW(itemBefore[cond]) = 200
NROW(itemAfter[cond]) = 199

显然,两个两个变量是不相等的,我需要防止这个错误。

我的解决方案无效:

cond <- data$V2 < 20
if (any(itemAfter[cond]==0)){
    data$R10[cond] <- sprintf("sp_%s-%s", itemBefore[cond], "none")}
}else {data$R10[cond] <- sprintf("sp_%s-%s", itemBefore[cond], itemAfter[cond])}

如何让我的解决方案代码起作用?感谢

编辑:

head(原始数据):

V1  V2 V3   V4
str 50  str2    pass
tre 13  stup1   plus
tre 70  vry plus
carq    60  rty plus
sty 17  tuc pass

头(预期结果):

V1  V2 V3   V4
str 50  str2    pass
tre 13  stup1   sp_str_tre
tre 70  vry plus
carq    60  rty plus
sty 17  tuc sp_carq_?

我的问题是数据的最后一行,该行下面没有其他行,因此我们遇到如下情况:sty 17 tuc sp_carq_?。 &#34;?&#34;表示下面没有项目。

0 个答案:

没有答案