根据数据集计算天数或公共时间跨度,包括R中的月,年,天和周

时间:2018-10-19 17:02:41

标签: r

我从一项调查中获得了一个数据集,该数据集询问某人练习程序已有多长时间了。我的问题是,允许用户键入数字,然后从下拉列表中选择几天,几个月,几周或几年。我设计这种方式是为了避免脏数据,但现在有一个问题:如何将这些全部计算成几天(或某种类型的时间跨度)?我想我将需要使用CASE WHEN语句,但是希望了解所有提示,并且想知道R中是否已经有一个函数可以执行类似的操作。

以下是我的搜索结果的链接:https://docs.google.com/spreadsheets/d/1QhZrObecugV5ovWWrMxrZpi7Boikp21hE41SWhVRU1A/edit?usp=sharing

我的目标是绘制在多少时间内损失了多少磅。我稍后会担心其他变量。

谢谢,请保持温柔-我是R的新人。

2 个答案:

答案 0 :(得分:1)

这是您要找的东西吗?这将使用dplyr包。

dt$days <- case_when(
            dt$c == "Day(s)"  ~ as.integer(dt$timespan),
            dt$c == "Week(s)"  ~ as.integer(dt$timespan * 7),
            dt$c == "Month(s)"  ~ as.integer(dt$timespan * 30),
            dt$c == "Year(s)"  ~ as.integer(dt$timespan * 365),
            )

这是我用来复制的集合:

str(dt)
'data.frame':   14 obs. of  6 variables:
 $ A       : Factor w/ 14 levels "10/19/2018 10:00:50",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ B       : num  34 6.6 60 80 30 18 45 17 31 16 ...
 $ timespan: int  4 7 22 18 24 11 3 4 5 4 ...
 $ c       : Factor w/ 2 levels "Month(s)","Week(s)": 1 2 2 1 2 2 1 2 1 2 ...
 $ d       : Factor w/ 5 levels "Dirty","Dirty, LCHF",..: 1 4 5 3 1 1 3 5 4 4 ...
 $ days    : int  120 49 154 540 168 77 90 28 150 28 ...

答案 1 :(得分:0)

这是一个快速的解决方案!我只是把您的Google表格放在Excel中并快速制作了一个csv,然后将其读入。我将时间编号更改为变量“ Number”,将月份,月份,周更改为变量“ Time Unit”。然后,我创建了一个快速的新类别,然后使用mutate()相乘

library(dplyr)
d <- read.csv("/pathtofile/Qdata.csv", header=T, stringsAsFactors=FALSE, na.strings=c("","NA"))

d$Time.num <- NA
d$Time.num[(d$Time.Unit == "Month(s)")] <- 30
d$Time.num[(d$Time.Unit == "Week(s)")] <- 7

d <- d %>% mutate(interval.days = Time.num *Number)

按计数可以提供良好的输出。希望有帮助!

编辑: 因此,由于只有两个选项,我们可以在此处执行一个简单的if_else()。

我认为这更优雅:

library(dplyr)
d <- read.csv("../LithuimsNPS/sNPSData/Qdata.csv", header=T, stringsAsFactors=FALSE, na.strings=c("","NA"))

d <- d %>% mutate(Time.num2 =if_else(Time.Unit== "Month(s)", 30, 7))