我有一个包含多个列的数据框。每当列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;表示下面没有项目。