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

  • 本文关键字:包括 计算 数据集 时间跨度 r
  • 更新时间 :
  • 英文 :


我有一个来自调查的数据集,询问某人练习了一个程序多长时间。 我的问题是,允许用户输入一个数字,然后从下拉列表中选择几天、几个月、几周或几年。 我这样设计它以避免脏数据,但现在有这样一个问题:我如何将这些全部计算成天(或某种类型的时间跨度(? 我想我需要使用 CASE WHEN 语句,但希望得到任何提示,并且想知道 R 中是否已经有一个函数可以做类似的事情。

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

我的目标是绘制在多长时间内减掉了多少磅。 我可以稍后担心其他变量。

谢谢,请温柔一点 - 我是 R 的新手。

这是你要找的吗?这将使用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 ...

这里有一个快速的解决方案!我只是拿了你的谷歌表格,在excel中做了一个快速的csv并阅读它。我将时间数字更改为变量"数字",将月、周更改为变量"时间单位"。然后我创建了一个快速的新类别,然后使用 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))

最新更新