gpt4 book ai didi

r - 有没有办法用一行代码来改变和创建许多新变量?

转载 作者:行者123 更新时间:2023-12-02 06:46:42 25 4
gpt4 key购买 nike

我有这样的东西:

df<-data.frame(group=c(1, 1, 1, 1,1,2, 2, 2, 2), 
date=c("2000-01-01 11:00:00", "2000-01-03 11:00:00", "2000-01-04 11:20:00", "2000-01-04 14:20:00", "2000-01-05 11:40:00", "2000-01-09 12:20:00", "2000-01-09 13:20:00", "2000-01-10 12:20:00", "2000-01-12 16:20:00"))
  group                date
1 1 2000-01-01 11:00:00
2 1 2000-01-03 11:00:00
3 1 2000-01-04 11:20:00
4 1 2000-01-04 14:20:00
5 1 2000-01-05 11:40:00
6 2 2000-01-09 12:20:00
7 2 2000-01-09 13:20:00
8 2 2000-01-10 12:20:00
9 2 2000-01-12 16:20:00

我想制作许多列来指示日期后 24 小时、48 小时等(例如):

df%>%mutate(first=date+86400, second=date+172800, third=date+259200) 

等等我在几秒钟内添加一天,但这非常耗时(如果我想要数百列)。我假设有一种方法可以迭代地执行此操作。

谢谢,

最佳答案

如果我们可以使用 english 包,则可以在使用 lapply 生成值的同时生成列名

library(english)
df$date <- as.POSIXct(df$date)
df[as.character(ordinal(1:3))] <- lapply(1:3, function(x) df$date + 86400 * x)

它可以在单行代码中通过循环中的 as.POSIXct 转换来完成,但是我们会不必要地多次进行转换(并非所有的单行代码都是有效的)


或者用purrr

library(purrr)
library(dplyr)
map_dfc(1:3, ~ tibble(!! as.character(ordinal(.x)) := df$date + 86400 * .x)) %>%
bind_cols(df, .)
# group date first second third
#1 1 2000-01-01 11:00:00 2000-01-02 11:00:00 2000-01-03 11:00:00 2000-01-04 11:00:00
#2 1 2000-01-03 11:00:00 2000-01-04 11:00:00 2000-01-05 11:00:00 2000-01-06 11:00:00
#3 1 2000-01-04 11:20:00 2000-01-05 11:20:00 2000-01-06 11:20:00 2000-01-07 11:20:00
#4 1 2000-01-04 14:20:00 2000-01-05 14:20:00 2000-01-06 14:20:00 2000-01-07 14:20:00
#5 1 2000-01-05 11:40:00 2000-01-06 11:40:00 2000-01-07 11:40:00 2000-01-08 11:40:00
#6 2 2000-01-09 12:20:00 2000-01-10 12:20:00 2000-01-11 12:20:00 2000-01-12 12:20:00
#7 2 2000-01-09 13:20:00 2000-01-10 13:20:00 2000-01-11 13:20:00 2000-01-12 13:20:00
#8 2 2000-01-10 12:20:00 2000-01-11 12:20:00 2000-01-12 12:20:00 2000-01-13 12:20:00
#9 2 2000-01-12 16:20:00 2000-01-13 16:20:00 2000-01-14 16:20:00 2000-01-15 16:20:00

关于r - 有没有办法用一行代码来改变和创建许多新变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537271/

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