【问题标题】:Selecting specific data containing specific characters in R (To create another variable)在 R 中选择包含特定字符的特定数据(创建另一个变量)
【发布时间】:2023-03-27 02:43:01
【问题描述】:

我有一个带有时间框架的数据框:

df <- data.frame(start_time = c("30.06.18 19:03", "07.09.19 14:20", "15.06.18 10:42"), stringsAsFactors = FALSE)

我想创建另一个变量来表示它是 2018 年还是 2019 年(其中 1 = 2018 和 2 = 2019)。我试过了……

df$Time <- ifelse(df %>% select(start_time:c(contains(".18"))), 1,
                  ifelse(df %>% select(start_time:c(contains(".19"))), 2, 0))

但我发现selection helpers apparently only work to selection variables。所以我有点不知所措。

非常感谢!

【问题讨论】:

  • 我鼓励您在处理日期时使用包lubridate。函数 lubridate::year(start_time) 将自动获取年份,并且创建另一个变量会更容易:data %&gt;% mutate(new_column = ifelse(year(start_time)==2018,1,2) 编辑:您可能需要重新映射数据格式才能使其工作,但 lubridate 具有转换数据到日期时间 (ymd_hms())
  • 非常感谢!我不知道这个!

标签: r dplyr tidyr


【解决方案1】:

你可以使用:

ifelse(substr(df$start_time,8,8) == 8,1,2)
[1] 1 2 1

df$Time <- ifelse(substr(df$start_time,8,8) == 8,1,2)
df
      start_time Time
1 30.06.18 19:03    1
2 07.09.19 14:20    2
3 15.06.18 10:42    1

【讨论】:

    【解决方案2】:

    除了@MonJeanJean 和@Karthik 的回答外,我还发现我可以使用grepl 函数来选择字符向量的特定字符串。

    无论如何,用grepl回答我自己的问题,

    df$Time <- ifelse(grepl(".18", df$start_time), 1,
                      ifelse(grepl(".19", df$start_time), 2, 0))
    

    【讨论】:

    • greplstringr 确实是处理子字符串研究和修改的最佳包。
    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 2019-11-11
    • 2021-11-16
    • 2021-11-26
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多