【问题标题】:Ifelse with multiple conditions across many rows/Ifelse 在多行中具有多个条件/
【发布时间】:2021-04-06 11:49:34
【问题描述】:

希望根据其他列的值添加一列,但超过一行。

DF:
Studios: A, B, C ...
Year:2000-2020
Id:r1,r2,r3,r4...
Top1:0,1,0,0,0

起始数据集如下所示:

id Year Studio Top1
r1 2020 A 0
r2 2001 B 0
r3 2019 A 1
r45 2005 D 1
r34 2005 E 1

Ifelse 状态(可能): 我想要实现的是“创建列PreviousTop1.If 列Studio1=studioX 其中year=year-1Top1=1。 *澄清:studio1指的是我的id当前所在的studio1。虽然 studioX 和 studio1 是同一个工作室,但 id 不同。

所需的输出:

id Year Studio Top1 PreviousTop1
r1 2020 A 0 1
r2 2001 B 0 0
r3 2019 A 1 0
r45 2005 D 1 0
r34 2005 E 1 0

正确答案的推理 PreviousTop=1,在第 1 行,因为 r3 存在。 所以我需要检查整个列是否有 1 个条件为真的实例,然后中断。

【问题讨论】:

    标签: r if-statement dplyr data-wrangling


    【解决方案1】:

    我建议以不同于 ifelse 的方式解决您的问题:

    创建一个每年仅包含 Top1 的表。仅在 year=year-1 基础上将此表与您的第一个表连接起来:

    top1 <- table %>% filter(Top1=1) %>% mutate(Year = Year +1)
    table %>% left_join(top1, by="Year")
    

    【讨论】:

    • 我真的不明白这有什么帮助,top1我有所有的 id 是 top1 并且只在一年中添加 1。我不明白这对 tbh 有什么帮助。
    • 如果您发现 Studio A 在 2019 年排在前 1,您加 1 获得 2020。现在在加入中,StudioA 将被添加到 2020 行
    【解决方案2】:

    您可以尝试这种基本的 R 方法:

    #Initialise PreviousTop1 column to 0
    df$PreviousTop1 <- 0
    #Find whose previous year data is present in the dataframe
    inds <- which((df$Year - 1) %in% df$Year)
    #Assign 1 to PreviousTop1 if Top1 = 1
    df$PreviousTop1[inds] <- +(df$Top1[match(df$Year[inds] - 1, df$Year)] == 1)
    df
    
    #   id Year Studio Top1 PreviousTop1
    #1  r1 2020      A    0            1
    #2  r2 2001      B    0            0
    #3  r3 2019      A    1            0
    #4 r45 2005      D    1            0
    #5 r34 2005      E    1            0
    

    数据

    df <- structure(list(id = c("r1", "r2", "r3", "r45", "r34"), Year = c(2020L, 
    2001L, 2019L, 2005L, 2005L), Studio = c("A", "B", "A", "D", "E"), 
    Top1 = c(0L, 0L, 1L, 1L, 1L)), row.names = c(NA, -5L), class = "data.frame")
    

    【讨论】:

    • 伙计们,感谢您的推荐,很抱歉出现重影,但我专注于手头的任务。对我有用的代码是: SQLtop10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多