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

两个简单的问题,我无法用简单的方式解决:

  •  -1
  • Gui_99  · 技术社区  · 8 年前

    1-)如果我有一列表示月份(M1,M2,M3,M4..M12…M1,M2,…),如何使用将每个函数替换为(01、02、03、04…)的函数? 我曾尝试使用mutate和replace,但没有成功。它只是与ifelse函数一起工作,但它非常大。

    我的第二个问题:

    如果我有一个包含很多字符名的列,如何在该列中过滤10个以上的名称?

    我尝试过过滤器(列==c(“xx”,“xy”…),但筛选结果不正确,我得到了这样一条消息:较长的对象长度不是较短对象长度的倍数

    1 回复  |  直到 8 年前
        1
  •  1
  •   cparmstrong    8 年前

    您可以使用更改月份 recode() 在内部 mutate() 像这样:

    dat %>% 
      mutate(month_column = recode(month,
                                   "M1" = "01",
                                   "M2" = "02",
                                   ...
                                   "M12" = "12"))
    

    请注意,我将它们作为字符串输入,因为这是获取前导零的方式。

    你的第二个问题还不清楚,但你想做的似乎是列出10个名字(总共有10个+n个名字),并且只列出这些名字的子集?如果是这样的话,你可以使用 filter() 使用 %in% 操作人员

    dat %>%
      filter(name_column %in% c("xx", "xy", ... ))
    

    还可以提取管道外部的向量:

    vector_of_names <- c("xx", "xy", ... )
    dat %>% filter(name_column %in% vector_of_names)
    

    如果将所有这些结合起来,则应如下所示:

    dat %>%
      filter(name_column %in% c("xx", "xy", ... )) %>%
      mutate(month_column = recode(month,
                                   "M1" = "01",
                                   "M2" = "02",
                                   ...
                                   "M12" = "12"))
    
    推荐文章