我想从前一行获取字符串,如果从另一列满足条件,则与当前行字符串连接
条件:如果'标记'在从AG列中的上一行获取字符串并从AG列中获取当前行字符串之后,它是1连接。
我的数据框样本在下面给出,所需的结果在"期望的结果"中给出。柱
AG Flag Desired result
Team a 0
Team b 0
CI 0
Team a 1 CI to Team a
Team b 0
Team b 0
C 0
CI 1 C to CI
Team a 0
Team b 1 Team a to Team b
我的代码是
mydata$trans <- ifelse(mydata$Flag == 1,paste(mydata$AG[-1],"to",mydata$AG[-nrow(mydata)]),"")
我得到了以下结果:
AG Flag trans
Team a 0
Team b 0
CI 0
Team a 1 Team b to Team a
Team b 0
Team b 0
C 0
CI 1 Team a to CI
Team a 0
Team b 0
C 0
CI 1 Team a to CI
Team a 0
Team b 1 Team b to Team a
我意识到我的代码是错误的,但即使经过多次反复试验,我也无法找到解决方案。 在此先感谢您的帮助!
答案 0 :(得分:0)
假设您的表名为x
,这是一个执行您想要的for循环。
x$trans <- NA
for (i in 2:nrow(x)) {
if (x[i, 2] == 1) {
x[i, 3] <- paste(x[i - 1, 1], "to", x[i, 1])
}
}
我在第二个索引处启动循环,因为我不确定如何处理第一行Flag
为1的情况。你可以轻松地单独处理这种特殊情况,甚至可以修改循环。
答案 1 :(得分:0)
这是使用程序包?lag
中dplyr
函数的一个选项(我还使用with
多次减少键入mydata
并将逻辑测试减少到{{1}因为0和1自动被解释为逻辑值):
Flag
你可以省略require(dplyr)
mydata$trans <- with(mydata, ifelse(Flag, paste(dplyr::lag(AG,1), "to", AG), ""))
#mydata
# AG Flag trans
#1 Team_a 0
#2 Team_b 0
#3 CI 0
#4 Team_a 1 CI to Team_a
#5 Team_b 0
#6 Team_b 0
#7 C 0
#8 CI 1 C to CI
#9 Team_a 0
#10 Team_b 1 Team_a to Team_b
,但我把它留在那里,所以它不会与dplyr::
混淆。