我正在尝试将数据帧的一列向下移动1行。
我将角色转换为数据框
final_forecasting <- read.csv(textConnection(forecasts), col.names = c("date", "prediction"))
然后我尝试使用data.table包中的shift函数:
x <- setDF(shift(final_forecasting))[]
我只想将“预测”列下移一行。但是我似乎无法完成它。我还想使用fill
函数将单个NA
值填写为1
。
一次尝试x <- setDF(shift(final_forecasting["prediction"]))[]
。
数据:
forecasts <- c("2019-03-08 04:59:00,1", "2019-03-08 05:59:00,-1", "2019-03-08 06:59:00,-1",
"2019-03-08 07:59:00,1", "2019-03-08 08:59:00,1", "2019-03-08 09:59:00,1",
"2019-03-08 10:59:00,1", "2019-03-08 11:59:00,-1", "2019-03-08 12:59:00,1",
"2019-03-08 13:59:00,1")
编辑:
另一种尝试:
x <- setDF(shift(final_forecasting, n = 1, fill = NA, type = "shift", give.names = TRUE))[]
答案 0 :(得分:1)
如果我说对了,我认为您需要的是使用setDT
library(data.table)
setDT(final_forecasting)
然后在所需的列中使用shift
:
final_forecasting[,.(date = shift(date),prediction = shift(prediction))]
date prediction
1: <NA> NA
2: 2019-03-08 05:59:00 -1
3: 2019-03-08 06:59:00 -1
4: 2019-03-08 07:59:00 1
5: 2019-03-08 08:59:00 1
6: 2019-03-08 09:59:00 1
7: 2019-03-08 10:59:00 1
8: 2019-03-08 11:59:00 -1
9: 2019-03-08 12:59:00 1
答案 1 :(得分:1)
library(data.table)
setDT(final_forecasting)
final_forecasting[, prediction := shift(prediction, fill = 1)]
# date prediction
# 1: 2019-03-08 05:59:00 1
# 2: 2019-03-08 06:59:00 -1
# 3: 2019-03-08 07:59:00 -1
# 4: 2019-03-08 08:59:00 1
# 5: 2019-03-08 09:59:00 1
# 6: 2019-03-08 10:59:00 1
# 7: 2019-03-08 11:59:00 1
# 8: 2019-03-08 12:59:00 -1
# 9: 2019-03-08 13:59:00 1
现在,如果要将数据转换回普通的data.frame
,只需运行:
setDF(final_forecasting)
或者直接在基数R中执行
final_forecasting$prediction <- c(1L, final_forecasting$prediction[-1])
数据:
forecasts <- c("2019-03-08 04:59:00,1", "2019-03-08 05:59:00,-1", "2019-03-08 06:59:00,-1",
"2019-03-08 07:59:00,1", "2019-03-08 08:59:00,1", "2019-03-08 09:59:00,1",
"2019-03-08 10:59:00,1", "2019-03-08 11:59:00,-1", "2019-03-08 12:59:00,1",
"2019-03-08 13:59:00,1")
final_forecasting <- read.csv(textConnection(forecasts), col.names = c("date", "prediction"))