【问题标题】:if else statement based on multiple conditions基于多个条件的 if else 语句
【发布时间】:2020-12-29 07:58:57
【问题描述】:

我有下表代表一个孩子,他的兄弟姐妹以及他们被分配的情况。资源 ID 代表它们被放在一起的房子。

child_id|sibling_id|case_id|resource_id
    1       8         123      12856
    1       9         123      12856
    3      11         321      12555
    4      12         323      10987
    4      13         323      10956
    6      14         156      10554
    6      15         156      10554
   10      16         156      10553
   10      17         145      18986
   10      18         145      18986

我想创建一个新列placed_together,其中显示yesno,用于根据case_ids 放置在一起的孩子。所以我的结果应该是这样的

child_id|sibling_id|case_id|resource_id|placed_together
        1       8         123      12856  Yes
        1       9         123      12856  Yes
        3      11         321      12555  No
        4      12         323      10987  No
        4      13         323      10956  No 
        6      14         156      10554  No
        6      15         156      10554  No 
       10      16         156      10553  No
       10      17         145      18986  Yes
       10      18         145      18986  Yes 

任何帮助将不胜感激。我不知道如何根据这些条件创建 if 语句,因为 case_id 对于一个组来说可以是相同的,但对于其中一个孩子来说,它们的资源 id 可能不同。

【问题讨论】:

    标签: r if-statement dplyr multiple-conditions


    【解决方案1】:

    可能使用tidyverse

    library(tidyverse)
    df %>%
       group_by(case_id) %>%
       mutate(placedTogether = if_else(n()>1 &length(unique(child_id))==1 & 
                                 length(unique(resource_id))==1, "Yes", "No"))
    # A tibble: 10 x 5
    # Groups:   case_id [5]
       child_id sibling_id case_id resource_id placedTogether
          <int>      <int>   <int>       <int> <chr>         
     1        1          8     123       12856 Yes           
     2        1          9     123       12856 Yes           
     3        3         11     321       12555 No            
     4        4         12     323       10987 No            
     5        4         13     323       10956 No            
     6        6         14     156       10554 No            
     7        6         15     156       10554 No            
     8       10         16     156       10553 No            
     9       10         17     145       18986 Yes           
    10       10         18     145       18986 Yes     
    

    【讨论】:

    • 谢谢,我认为这有效。我将不得不查看数据,看看它是否准确地改变了列。到目前为止它看起来不错,所以谢谢你:D
    【解决方案2】:

    假设您的数据框名为 df,您可以执行以下操作:

    # create a function that defines if a child is placed together
    IsPlacedTogether = function(x, y) ifelse(sum(x == y) > 1, 'Yes', 'No')
    # apply this function to every child in your data
    df$placed_together = sapply(df$case_id, IsPlacedTogether, df$case_id)
    

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 2023-01-12
      • 2015-04-21
      • 1970-01-01
      • 2018-09-24
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多