【问题标题】:Record variable to a dummy variable using weekdays使用工作日将变量记录为虚拟变量
【发布时间】:2016-01-16 16:26:08
【问题描述】:

我有一个从星期一开始的变量,它列出了从 1 到 7 的每个日期。我想将其更改为工作日与周末,分别使用 0-1 来创建一个虚拟变量。我知道怎么做,但我不知道如何在代码的迭代中包含 6 和 7。

例如,我放了以下内容:

flights$dayweek <-factor(ifelse(as.numeric(flights$dayweek)==6, 1,0))

我对上述内容的意图是让代码找到显示 6 和 7 的任何位置,然后将其替换为 1,对于航班数据集中的变量 dayweek,其他任何内容都为 0。上面的问题是它只做 6 而不是 7。我不知道如何在数据集中包含 7。我试过了:

flights$dayweek <-factor(ifelse(as.numeric(flights$dayweek)==6:7, 1,0))
flights$dayweek <-factor(ifelse(as.numeric(flights$dayweek)==c(6,7), 1,0))

我查看了其他常见的虚拟变量主题,但它们似乎都是简单的 1 到 0,例如男性/女性,我知道如何做到这一点。我可以做一个大于 5 的函数吗?以下示例数据:

schedtime carrier deptime dest distance date dayweek daymonth delay
1700      RU      1651    WER  213      1401    4       1     ontime
1800      RU      1402    EWR  199      1401    6       1     delayed

【问题讨论】:

    标签: r dummy-variable


    【解决方案1】:

    使用%in% 运算符测试向量中的包含。

    # using an example dataset
    flights <- data.frame(dayweek = rep(1:7, 2), "flight" = letters[1:14])
    flights$dayweek <-factor(ifelse(as.numeric(flights$dayweek) %in% c(6, 7), 1,0))
    
    > flights
       dayweek flight
    1        0      a
    2        0      b
    3        0      c
    4        0      d
    5        0      e
    6        1      f
    7        1      g
    8        0      h
    9        0      i
    10       0      j
    11       0      k
    12       0      l
    13       1      m
    14       1      n
    

    【讨论】:

    • 感谢您的回复。而是将所有内容都设置为 0,而不是仅将列中 6 或 7 的任何内容更改为 1。有 250 次迭代 6 和 253 的 7 所以我应该有 503 1s 的输出。
    • 您能否使用dput发布您的数据摘录?
    • 请将其添加到问题中。
    • @Greg ,您的数据和我的示例数据集看起来非常相似。您对所提供的解决方案还有疑问吗?
    • 啊哈!有效。所以这是我学习 R 的第二天。我将不得不在 %in% 上学习。感谢您的帮助。
    猜你喜欢
    • 2021-01-01
    • 2021-11-30
    • 1970-01-01
    • 2014-01-27
    • 2023-01-31
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多