【发布时间】:2016-07-23 04:09:06
【问题描述】:
数周以来一直试图解决这个问题,但似乎无法解决。
我有以下数据框:
post_id user_id
1 post-1 user1
2 post-2 user2
3 comment-1 user1
4 comment-2 user3
5 comment-3 user4
6 post-3 user2
7 comment-4 user2
并想创建一个新变量parent_id。因此,对于每个观察,它应该执行以下步骤:
- 检查
post_id是post还是comment - 如果
post_id是post,那么parent_id应该等于整个数据帧中最早的post_id。 - 如果
post_id是第一个帖子,那么parent_id应该等于NA - 如果
post_id是comment,那么parent_id应该等于它遇到的第一个post_id。
输出应该类似于:
post_id user_id parent_id_man
1 post-1 user1 NA
2 post-2 user2 post-1
3 comment-1 user1 post-2
4 comment-2 user3 post-2
5 comment-3 user4 post-2
6 post-3 user2 post-1
7 comment-4 user2 post-3
我尝试了以下方法:
#Prepare data
df <- df %>% separate(post_id, into=c("type","number"), sep="-", remove=FALSE)
df$number <- as.numeric(df$number)
df <- df %>% mutate(comment_number = ifelse(type == "comment",number,99999))
df <- df %>% mutate(post_number = ifelse(type == "post",number,99999))
#Create parent_id column
df <- df %>% mutate(parent_id = ifelse(type == "post",paste("post-",min(post_number), sep=""),0))
df <- df %>% mutate(parent_id = ifelse(parent_id == post_id,"NA",parent_id))
df <- df %>% select(-comment_number, -post_number)
使用该代码,我可以执行步骤 1、2 和 3,但 步骤 4 超出了我的范围。我觉得基于某种类型的条件滞后应该能够解决它,但无法想出如何去做。
任何想法将不胜感激!
【问题讨论】:
-
请发布示例数据、所需的输出和您尝试过的代码。
-
感谢@mtoto 的建议,我认为现在应该更清楚了。 :)
标签: r conditional selection dplyr