相关疑难解决方法(0)

ifelse每次都真的计算它的两个向量吗?它慢吗?

难道ifelse真的同时计算yesno载体-如,每个向量的全部?或者它只是从每个向量计算一些值?

还有,ifelse真的那么慢吗?

performance if-statement r vectorization

62
推荐指数
1
解决办法
2791
查看次数

R出生日期和任意日期的有效和准确的年龄计算(年,月或周)

我面临着计算出生日期和任意日期的年龄(年,月或周)的共同任务.事情是,我经常需要在许多记录(> 3亿)上执行此操作,因此性能是一个关键问题.

在SO和Google中快速搜索后,我找到了3个替代方案:

  • 常用的算术程序(/365.25)(链接)
  • 使用函数new_interval()duration()lubridate(链接)
  • age_calc()包中的功能eeptools(链接,链接,链接)

所以,这是我的玩具代码:

# Some toy birthdates
birthdate <- as.Date(c("1978-12-30", "1978-12-31", "1979-01-01", 
                       "1962-12-30", "1962-12-31", "1963-01-01", 
                       "2000-06-16", "2000-06-17", "2000-06-18", 
                       "2007-03-18", "2007-03-19", "2007-03-20", 
                       "1968-02-29", "1968-02-29", "1968-02-29"))

# Given dates to calculate the age
givendate <- as.Date(c("2015-12-31", "2015-12-31", "2015-12-31", 
                       "2015-12-31", "2015-12-31", "2015-12-31", 
                       "2050-06-17", "2050-06-17", "2050-06-17",
                       "2008-03-19", "2008-03-19", "2008-03-19", 
                       "2015-02-28", "2015-03-01", "2015-03-02"))

# Using a common arithmetic procedure ("Time differences in …
Run Code Online (Sandbox Code Playgroud)

r lubridate

15
推荐指数
4
解决办法
1万
查看次数

将出版日期中的列更改为r中的年龄

我是第一次使用data.table.

我的桌子上有一个大约400,000年的专栏.我需要将它们从出生日期转换为年龄.

做这个的最好方式是什么?

r date-of-birth

11
推荐指数
3
解决办法
3万
查看次数

方便地移动列

关于如何将列移动到第一个或最后一个位置有很多问题和答案.

使用dplyr最佳答案分别类似于:

iris2 <- iris %>% head(2)
iris2 %>% select( Sepal.Width, everything()) # move Sepal.Width to first
#   Sepal.Width Sepal.Length Petal.Length Petal.Width Species
# 1         3.5          5.1          1.4         0.2  setosa
# 2         3.0          4.9          1.4         0.2  setosa

iris2 %>% select(-Sepal.Width, Sepal.Width) # move Sepal.Width to last
#   Sepal.Length Petal.Length Petal.Width Species Sepal.Width
# 1          5.1          1.4         0.2  setosa         3.5
# 2          4.9          1.4         0.2  setosa         3.0
Run Code Online (Sandbox Code Playgroud)

但是,我没有找到任何简单的方法在给定的一个之后或之前移动一个列.

我在下面发布了一个粗略的解决方案但是:

  • 我发现它很笨重
  • 它没有利用dplyr函数的灵活性来使用数字索引,名称,字符串等......

我相信使用dplyr我们也可以移动列的列表,或者在名称等中显示模式的一组列...但我对dplyr样式编程还不是很熟悉.

所以我挑战你做得更好/更聪明,或者指出我错过的明显解决方案. …

r dplyr

11
推荐指数
3
解决办法
652
查看次数

使用具有lubridate函数的mutate计算年龄

我想根据出生日期计算年龄.

如果我使用lubridate,我会按照R给定出生日期和任意日期的有效和准确的年龄计算(年,月或周)运行以下内容

as.period(new_interval(start = birthdate, end = givendate))$year

但是,当我尝试使用mutatein dplyr来创建新变量时,我遇到了一个错误.

library(dplyr); library(lubridate)

birthdate <- ymd(c(NA, "1978-12-31", "1979-01-01", "1962-12-30"))
givendate <- ymd(c(NA, "2015-12-31", "2015-12-31", NA))

df <- data.frame(
    birthdate = birthdate,
    givendate = givendate)
Run Code Online (Sandbox Code Playgroud)

以下工作虽然它给出了所有日期和时间值.即年,月,日,小时,分钟和秒.

df<-df %>% mutate(age=as.period(interval(start = birthdate, end = givendate)))

# df
#    birthdate  givendate                  age
# 1       <NA>       <NA>                 <NA>
# 2 1978-12-31 2015-12-31   37y 0m 0d 0H 0M 0S
# 3 1979-01-01 2015-12-31 36y 11m 30d 0H 0M 0S
# 4 …
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr

4
推荐指数
2
解决办法
2008
查看次数