gpt4 book ai didi

r - 根据其他变量的函数创建新变量

转载 作者:行者123 更新时间:2023-12-02 07:44:19 24 4
gpt4 key购买 nike

如何将整个列作为参数传递给函数,然后创建一个新列,该新列是其他两个列的函数?例如,取 this向日期添加月份的出色功能,并以此示例数据框为例:

df <- structure(
list(
date = structure(
c(
17135,
17105,
17105,
17074,
17286,
17317,
17317,
17347,
17105,
17317
),
class = "Date"
),
monthslater = c(10,
11, 13, 14, 3, 3, 3, 3, 4, NA)
),
.Names = c("date", "monthslater"),
row.names = c(NA, 10L),
class = "data.frame"
)

我想创建一个新列,将 datemonthslater 列中的条目传递给函数 add.months 我会认为这样的事情会起作用:

df$newdate <- add.months(df$date, df$monthslater)

但事实并非如此。

该函数的完整代码是:

add.months <- function(date,n) seq(date, by = paste(n, "months"), length = 2)[2]

最佳答案

使用lubridate包中的%m+%:

library(lubridate)
df$newdate <- df$date %m+% months(df$monthslater)

给出:

> df
date monthslater newdate
1 2016-11-30 10 2017-09-30
2 2016-10-31 11 2017-09-30
3 2016-10-31 13 2017-11-30
4 2016-09-30 14 2017-11-30
5 2017-04-30 3 2017-07-30
6 2017-05-31 3 2017-08-31
7 2017-05-31 3 2017-08-31
8 2017-06-30 3 2017-09-30
9 2016-10-31 4 2017-02-28
10 2017-05-31 4 2017-09-30
<小时/>

以类似的方式,您还可以添加天或年:

df$newdate2 <- df$date %m+% days(df$monthslater)
df$newdate3 <- df$date %m+% years(df$monthslater)

给出:

> df
date monthslater newdate newdate2 newdate3
1 2016-11-30 10 2017-09-30 2016-12-10 2026-11-30
2 2016-10-31 11 2017-09-30 2016-11-11 2027-10-31
3 2016-10-31 13 2017-11-30 2016-11-13 2029-10-31
4 2016-09-30 14 2017-11-30 2016-10-14 2030-09-30
5 2017-04-30 3 2017-07-30 2017-05-03 2020-04-30
6 2017-05-31 3 2017-08-31 2017-06-03 2020-05-31
7 2017-05-31 3 2017-08-31 2017-06-03 2020-05-31
8 2017-06-30 3 2017-09-30 2017-07-03 2020-06-30
9 2016-10-31 4 2017-02-28 2016-11-04 2020-10-31
10 2017-05-31 4 2017-09-30 2017-06-04 2021-05-31

关于r - 根据其他变量的函数创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com