考虑这个数据集:
myData = data.frame(parent = c(1,3,5,7,8,9)
,child = c(2,4,6,8,9,10))
我想将此数据集过滤到仅属于父#7的记录。在T-SQL中,我将使用递归公用表表达式来完成此操作。有没有办法在R?中优雅地做这样的事情?
答案 0 :(得分:1)
如果没有一个更复杂的例子,很难确切地看到你需要什么(因为这里没有“递归”。它只有一个层次。但是,要回答你的具体问题,这里有两种方式:
myData = data.frame(parent = c(1,3,5,7,8,9),child = c(2,4,6,8,9,10))
#Using Dplyr
library(dplyr)
myData %>% filter(parent == "7")
#Using Base R
myData$child[myData$parent == 7]
修改强>
根据下面的评论,我认为这个简单的脚本会做到这一点。可能有一种更简单的方法,但下面的do while循环是第一个想到的方法:
newParent = 7
answer <- c()
repeat{
currentResult <- myData$child[myData$parent == newParent]
if(length(currentResult) != 0){
newParent <- currentResult
answer <- c(answer, newParent)
}else{
break
}
}
> answer
[1] 8 9 10
编辑#2
由于OP有兴趣了解它是如何完成的,所以这是递归重写的相同事情:
findChild <- function(myData, parent){
currentChild <- myData$child[myData$parent == parent]
if(length(currentChild) != 0){
return(c(currentChild, findChild(myData, currentChild)))
}else{
return()
}
}
findChild(myData, 7)