我想将给定的数据帧从
c1 c2 c3 c4 c5
VEG PUFF <NA> 12 <NA> <NA> 78.43
CHICKEN PUFF <NA> 16 <NA> 88.24 <NA>
BAKERY Total <NA> <NA> 28 <NA> 84.04
Run Code Online (Sandbox Code Playgroud)
到
c1 c2
VEG PUFF 12 78.43
CHICKEN PUFF 16 88.24
BAKERY Total 28 84.04
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法,但没有得到准确的结果有时会取左侧行值
step1 <- t(na.locf(t(df), fromLast=T))
step2 <- t(na.locf(t(step1), fromLast=F))
library(dplyr)
MyReplace = function(data) {data %>% t %>% na.locf(.,,T) %>% na.locf %>% t
Run Code Online (Sandbox Code Playgroud) 是否有 rollmin 的函数,与 Zoo 包中的 rollmean 和 rollmax 的工作方式相同?我查看了动物园的帮助文档,但找不到任何内容。
我有一个类似于这个虚拟数据的数据帧(时间序列):
df <- data.frame(stringsAsFactors=FALSE,
symbol = c("N2", "NJ", "K-Kl", "K-P3", "K-N", "KP+", "K13", "KS",
"KTotal", "P500", "P800", "P23", "P55", "PA", "PKA"),
date = c("2017-10-12", "2017-10-12", "2017-10-12", "2017-10-12",
"2017-10-12", "2017-10-12", "2017-10-12", "2017-10-12",
"2017-10-12", "2017-10-12", "2017-10-12", "2017-10-12", "2017-10-12",
"2017-10-12", "2017-10-12"),
open_pr = c(10.2, 2.7, 0.5, 4.5, 2.9, 8.1, 2.3, 1, 43.2, 28.5, 5.8, 6.7,
5.7, 0.1, 10),
gross = c(460L, 121L, 21L, 203L, 130L, 363L, 102L, 45L, 1946L, 1282L,
262L, 303L, 256L, 6L, 449L),
avg_aud = c(19L, 3L, 0L, 5L, 5L, 21L, …Run Code Online (Sandbox Code Playgroud) 我已经按月和年对一些数据进行了分组,使用zoo将其转换为yearmon,现在正在将其绘制在ggplot中。有谁知道为什么其中一个刻度标签缺失,而 2018-07 年却有一个,而该月没有数据?
示例数据:
df <- data.frame(dates = c("2019-01", "2019-02", "2018-08", "2018-09", "2018-10", "2018-11", "2018-12"), values= c(0,1,2,3,4,5,6))
df$dates <- as.yearmon(df$dates)
ggplot(df, aes(x = dates, y = values)) +
geom_bar(position="dodge", stat="identity") +
theme_light() +
xlab('Month') +
ylab('values')+
scale_x_yearmon(format="%Y %m")
Run Code Online (Sandbox Code Playgroud)
我想计算每年的季节性平均值,而不是整个时期。我将我的季节定义如下:DJF(12 月至 2 月)、MAM(3 月至 5 月)、JJA(6 月至 8 月)和 SON(9 月至 11 月)。
受到Fredrick问题解决方案的启发,我创建了一个索引“groups”来表示季节,然后我应用了命令“stackApply”,但这个命令计算了整个时期的平均季节值。我解释说,获得的最后一层只包含 4 个栅格,但就我而言,我想计算“每年的季节性平均值,因此每年必须有 4 个栅格,并且栅格堆栈总共应该有 136 个栅格。
在我的代码下面
谢谢你的帮助
library(raster)
set.seed(123)
r <- raster(ncol=10, nrow=10)
r_brick <- brick(sapply(1:408, function(i) setValues(r, rnorm(ncell(r), i, 3))))
dim(r_brick)
dates <- seq(as.Date("1982-01-01"), as.Date("2015-12-31"), by="month")
months <- format(dates, "%Y-%m")
groups <- function(x) {
d <- as.POSIXlt(x)
ans <- character(length(x))
ans[d$mon %in% c(11,0:1)] <- "DJF"
ans[d$mon %in% 2:4] <- "MAM"
ans[d$mon %in% 5:7] <- "JJA"
ans[d$mon %in% 8:10] <- "SON"
ans …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的数据集
df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(NA, NA, 12, 13, NA, 5, NA, NA, NA, 1))
Run Code Online (Sandbox Code Playgroud)
我想要这样的输出,以便最后的观察结果被向前推进(按组),除非在一个填充值之前只有 NA 值,那么我希望将最后的观察结果向后推进:
df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(12, 12, 12, 13, 13, 5, 5, 5, 1, 1))
Run Code Online (Sandbox Code Playgroud)
我一直在使用 Zoo 包中的 dplyr 和 na.locf 。到目前为止我的方法是这样的:
df%>%
group_by(PID%>%
mutate_all(funs(na.locf(., na.rm = FALSE)))
Run Code Online (Sandbox Code Playgroud)
然而,这只是最后的观察结果。na.locf 函数中的规范“fromLast”向后进行最后一次观察。
但是我如何连接这两个,以便使用这两个功能:
提前非常感谢!
我试图将答案减去2次.
这是一个例子:
> timer2$tdif2 <- as.numeric(strptime(as.character(timer2$time3), "%H:%M:%S:%OS") - strptime(as.character(timer2$time2), "%H:%M:%S:%OS"))
> timer2$tdif1 <- as.numeric(strptime(as.character(timer2$time2), "%H:%M:%S%OS") - strptime(as.character(timer2$time1), "%H:%M:%S%OS"))
> timer2$tdif2 <- as.numeric(strptime(as.character(timer2$time3), "%H:%M:%S:%OS") - strptime(as.character(timer2$time2), "%H:%M:%S:%OS"))
> timer2$tdifMax <- as.numeric(strptime(as.character(timer2$time3), "%H:%M:%S.%OS") - strptime(as.character(timer2$time1), "%H:%M:%S.%OS"))
> head(timer2)
time1 time2 time3 tdif1 tdif2 tdifMax
1 08:00:20.799 08:00:20.799 08:00:20.799 0.0000000000 NA 0
2 08:00:21.996 08:00:22.071 08:00:23.821 -0.9249999523 NA 2
3 08:00:29.200 08:00:29.200 08:00:29.591 0.0000000000 NA 0
4 08:00:31.073 08:00:31.372 08:00:31.384 0.2990000248 NA 0
5 08:00:31.867 08:00:31.867 08:00:31.971 0.0000000000 NA 0
6 08:00:37.174 08:00:38.073 …Run Code Online (Sandbox Code Playgroud) 我有一个动物园时间序列对象.在保留日期的同时,如何按值对其进行排序?
如果这是我的系列:
2013-10-02 2013-10-03 2013-10-04 2013-10-07 2013-10-08 2013-10-09
-0.02 0.00 0.00 0.04 0.00 0.02
Run Code Online (Sandbox Code Playgroud)
结果应该是:
2013-10-02 2013-10-03 2013-10-04 2013-10-08 2013-10-09 2013-10-07
-0.02 0 0 0 0.02 0.04
Run Code Online (Sandbox Code Playgroud)
普通sort按日期(而非值)对zoo对象进行排序.zoo对象(日期,1个值系列)具有暗淡的NULL,因此无法指定我想要按第二列排序.
我有一个动物园对象清单,我想将它们合并。我已经确保它们的长度相同。为了合并它们,我需要做一些类似的事情,
merge(my_list[[1]],my_list[[2]]...)
Run Code Online (Sandbox Code Playgroud)
但是随着列表长度的增加,这很快变得很麻烦。有人对此有建议吗?
因此,假设我有以下内容:
library(zoo)
v <- read.zoo(data.frame(dt=as.Date('2011-01-01')+0:9, a=1:10, b=11:20, c=21:30), index.column = "dt")
Run Code Online (Sandbox Code Playgroud)
为什么这样做:
ifelse(v$a > 5, 1, 0)
Run Code Online (Sandbox Code Playgroud)
这不起作用:
ifelse(v$a > 5 && v$a < 8, 1, 0)
Run Code Online (Sandbox Code Playgroud)