我正在尝试复制一个excel表达式,用于在两个值上使用索引和匹配填充缺少的主题信息。
相关的列是Topic(factor),Post.ID(int)和Parent.ID(int)。
str(df)
'data.frame': 1995 obs. of 3 variables:
$ Topic : Factor w/ 76 levels "Winter Olympics",..: 8 8 8 8 8 6 6
$ Post.id : int 295221 290611 288426 290823 292140 289990 289989
$ Parent.id: int NA NA NA NA 290611 ...
每一行都有一个帖子ID,但如果帖子是另一个帖子的子节点并且与父节点的帖子ID相同,则填充parent.id.层次结构只是一个级别。我试图通过将Post.ID与Parent.ID匹配并获取父级主题来向子级添加主题。
这是excel公式:
=IF([Topic]=0,IFERROR(IF([Parent ID]=0,[Topic],(INDEX([Topic]$[StartCell]:[Topic]$[EndCell], MATCH([Parent ID],[Post ID]$[StartCell]:[Post ID]$[EndCell],0))))),[Topic]),[Topic])
我尝试了以下ifelse函数并且它可以工作,除了它将因子转换为整数。
ifelse(is.na(df$Topic),
df$Topic[df$Post.id %in% df$Parent.id],
df$Topic)
我尝试将确切的事情转换为if_else,但我收到以下错误
Evaluation error: `true` must be length 1995 (length of `condition`) or one, not 429.
我还尝试创建一个独立的主题和帖子ID的单独数据框,重命名帖子ID然后做一个left_join,但这真的很笨重,我知道必须有一个更清洁的方法来做。