【发布时间】:2018-07-14 17:05:49
【问题描述】:
我正在使用dplyr 转换一个大型数据框,并且我想将 DF 的最近日期 + 1 存储为一个值。我知道通过分解语句可以更轻松地做到这一点,但我试图用一个管道语句来完成这一切。我遇到了一些事情,我不确定为什么 R 会默认这种方式。示例:
Day <- seq.Date(as.Date('2017-12-01'), as.Date('2018-02-03'), 'day')
Day <- sample(Day, length(Day))
ID <- sample(c(1:5), length(Day), replace = T)
df <- data.frame(ID, Day)
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) #%>%
#slice(1)
foo <- foo[1,1]
当我运行此代码时,foo 根据需要变为等于 2018-02-04 的值。但是,当我使用 slice 未注释运行代码时:
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) %>%
slice(1)
foo <- foo[1,1]
foo 保留为数据框。我的主要问题是为什么foo 在第二个示例中没有成为一个值,我的第二个问题是是否有一种简单的方法将“2018-02-04”作为存储为foo 的值全部来自一个@ 987654330@管道。
谢谢
【问题讨论】:
-
也许您正在寻找
pull。或者只是做max(df$Day) + 1 -
我会查看
pull谢谢。是的,这在这种情况下肯定会起作用,但是在我的实际代码中到达当前的Day/ID表之前,我必须做很多 df 操作,我宁愿在一个语句中完成所有操作。 -
<the-long-pipe> %>% summarise(max(Day) + 1) %>% pull() -
有谁知道为什么这被标记为重复?两个引用的问题都没有解决从 1x1 数据帧/小标题中提取标量的问题;他们都是关于将列提取为向量。也许对 R 奇怪的打字系统有更好的理解会让它更明显,但对于像我这样的 R 新手来说,没有明显的联系。