我从一项调查中获得了一个数据集,该数据集询问某人练习程序已有多长时间了。我的问题是,允许用户键入数字,然后从下拉列表中选择几天,几个月,几周或几年。我设计这种方式是为了避免脏数据,但现在有一个问题:如何将这些全部计算成几天(或某种类型的时间跨度)?我想我将需要使用CASE WHEN语句,但是希望了解所有提示,并且想知道R中是否已经有一个函数可以执行类似的操作。
以下是我的搜索结果的链接:https://docs.google.com/spreadsheets/d/1QhZrObecugV5ovWWrMxrZpi7Boikp21hE41SWhVRU1A/edit?usp=sharing
我的目标是绘制在多少时间内损失了多少磅。我稍后会担心其他变量。
谢谢,请保持温柔-我是R的新人。
答案 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))