代码之家  ›  专栏  ›  技术社区  ›  delcast

字符串替换为列表

  •  0
  • delcast  · 技术社区  · 7 年前

    我就快到了。我想取一个字符串向量,并应用以下条件再次返回一个向量。在第三步中,我在遍历列表时遇到问题。

    数据样本:

    > assignment
     [1] "female"                                       "female"                                      
     [3] "female"                                       "female"                                      
     [5] "male"                                         "female, female"                              
     [7] "female"                                       "female, female, female"                      
     [9] "female"                                       "female"                                      
    [11] "female"                                       "female"                                      
    [13] "female"                                       "female"                                      
    [15] "female"                                       "female"                                      
    [17] "female, female, female, female, female, male" "male"                                        
    [19] "female"                                       NA                                      
      

    我所做的:

    #Split each row into multiple strings
    genders <- str_split(assignment, ", ")
    
    #Assign 1 for female and 0 for male
    females_count <- lapply(genders, str_count, pattern="female")
    
    #Count how many women are in each list element
    females_sum <- lapply(females_count, sum)

    这里是我被卡住的地方,我想创建另一个向量,它的长度与 assignment 根据以下规则:

    compare_genders <- function(females_count,females_sum){
    
      ifelse (females_sum==1,
      "single_female",
      ifelse(females_sum>1&&females_count!=0,
      "mult_males",
      ifelse(females_sum==0&&length(females_count)==1,
      "single_male",
      ifelse(females_sum==0&&length(females_count)>1,
      "mult_males",
      ifelse(females_sum>1&&length(females_count)>1,
      "mixed_genders","strange"))))
      
    }
    
    compare_genders(females_count = females_count,females_sum = females_sum)

    但随后我得到一条错误消息:

    Error in ifelse(females_sum[[i]] == 1, "single_female", ifelse(females_sum[[i]] >  : 
      unused arguments ("mult_males", ifelse(females_sum[[i]] == 0 && length(females_count[[i]]) == 1, "single_male", ifelse(females_sum[[i]] == 0 && length(females_count[[i]]) > 1, "mult_males", ifelse(females_sum[[i]] > 1 && length(females_count[[i]]) > 1, "mixed_genders", "strange"))))

    所需向量的示例:

    > new_vector
     [1] "single_female"                                       "single_female"                                      
     [3] "single_female"                                       "single_female"                                      
     [5] "single_male"                                         "mult_females"                              
     [7] "females"                                       
     "mult_females"                      
     [9] "single_female"                                       "single_female"                                      
    [11] "single_female"                                       "single_female"                                      
    [13] "single_female"                                       "single_female"                                      
    [15] "single_female"                                       "single_female"                                      
    [17] "mixed_genders"
    "single_male"                                        
    [19] "single_female"                                       NA                                     
    1 回复  |  直到 7 年前
        1
  •  0
  •   delcast    7 年前

     
    #Split each row into multiple strings
    genders <- str_split(assignment, ", ")
    #Assign 1 for female and 0 for male
    females_count <- lapply(genders, str_count, pattern="female")
    #Count how many women are in each list element
    females_sum <- lapply(females_count, sum)
    
    compare_genders <- function(females_count,females_sum){
      ifelse (females_sum==1&&length(females_count)==1,
      "single_female",
      ifelse(females_sum==length(females_count)&&females_sum!=0,
      "mult_females",
      ifelse(females_sum==0&&length(females_count)==1,
      "single_male",
      ifelse(females_sum==0&&length(females_count)!=0,
      "mult_males",
      ifelse(females_sum!=length(females_count),
      "mixed_genders","strange")))))
    }
    new_vector <- mapply(compare_genders,females_count,females_sum)