R error in '[<-.data.frame'... replacement has # items, need # - r

I am new to R and this one is beyond me. The script below uses two dummy tables (result and count) each with two columns (A and B). I'm running permutations tests to compare the results from A and B. Specifically, I'm looking at result/count for A and B. Both result and count have 20 rows and I've written a loop to run a permutation test for the first 10 rows of each, then the first 11, then 12, up to 20. When it works, which it does on occasion, I get a pretty graph at the end.
#Set up the dummy data - two competing tables (result & count)
result <- data.frame(matrix(runif(40)*100, nrow=20))
names(result)[1] <- paste("A"); names(result)[2] <- paste("B")
count <- data.frame(matrix(runif(40)*100, nrow=20))
names(count)[1] <- paste("A"); names(count)[2] <- paste("B")
n.iter <- 1e3
#Run a permutation test
permtest <- function(result, count) {
n <- dim(result)[1]
# print(n)
stat <- function(x, y) abs(diff(range(colSums(x)/colSums(y))))
swap <- function(x, i) { x[i, ] <- cbind(x[, "B"], x[, "A"])[i, ]; return (x) }
sim <- replicate(n.iter, { i <- runif(n) < 1/2; stat(swap(result, i), swap(count, i)) })
result.stat <- stat(result, count)
p.value <- sum(sim >= result.stat) / length(sim)
return(list(sim, result.stat, p.value))
}
#Compute evolution of p-values over time
p.evol <- data.frame()
for (i in 10:dim(result)[1]) {
# print(i)
permresults <- permtest(result[1:i,], count[1:i,])
p.value <- permresults[[3]]
p.evol <- rbind(p.evol, c(i, p.value, 1-p.value))
}
colnames(p.evol) <- c("day", "p.value", "conf")
dev.new()
plot(p.evol[,1],p.evol[,3], type="b", xlab="Day",ylab="Percentage", main="Evolution of Confidence")
The problem is that while sometimes it runs no problem, most of the time I get Error in '[<-.data.frame'('*tmp*', i, , value = numeric(0)) : replacement has 0 items, need 24. With options(error=traceback) I get the output here, which I am not understanding:
f(ngettext(m, "replacement has %d item, need %d",
"replacement has %d items, need %d"), m, n * p), domain = NA)
16: `[<-.data.frame`(`*tmp*`, i, , value = numeric(0)) at errortest.R#16
15: `[<-`(`*tmp*`, i, , value = numeric(0)) at errortest.R#16
14: swap(result, i)
13: is.data.frame(x)
12: colSums(x)
11: diff(range(colSums(x)/colSums(y))) at errortest.R#15
10: stat(swap(result, i), swap(count, i)) at errortest.R#17
9: FUN(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)[[42L]], ...)
8: lapply(X = X, FUN = FUN, ...)
7: sapply(integer(n), eval.parent(substitute(function(...) expr)),
simplify = simplify)
6: replicate(n.iter, {
i <- runif(n) < 1/2
stat(swap(result, i), swap(count, i))
}) at errortest.R#17
5: permtest(result[1:i, ], count[1:i, ]) at errortest.R#27
4: eval(expr, envir, enclos)
3: eval(ei, envir)
2: withVisible(eval(ei, envir))
1: source("errortest.R", echo = F)
What is particularly puzzling is that it works sometimes! How is this possible? I've also noticed that when I un-comment print(n) and print(i) it seems to make it work more frequently, although it can fail when they are not commented and work when they are. Thanks in advance for the help!

This error pops up when you're unlucky and i <- runif(n) < 1/2 consists only of FALSE, i.e. no permutations happen. You need to add a check in the swap function to fix this problem.

Related

Cutpoint/threshold not determined using R?

Please find My data below. q constitutes a sample of 100 cases.
I have two covariates follow.up and hematoma, each indicating follow up time (in days) and the event of a post-surgically bleeding after specific procedure.
Based on the cumulative incidence curve below, it seems that the risk decreases after the initial couple of days. I wish to mark or estimate after how many days the slope flattens.
I have applied library(maxstat) but I cannot seem to get it to work.
maxstat.test(Surv(follow.up, hematoma) ~ 1, data=q, smethod="Median", pmethod="HL", alpha=0.05)
Which yields
Error in match.arg(type) : 'arg' should be one of "LogRank"
Which intuitively is wrong as there are no subgroups, and therefore no need for a LogRank? Even changing smethod="LogRank" does not solve the problem.
Can you help me apply maxstat to determine a cut-off (or by any other method)?
q <- structure(list(hematoma = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), follow.up = c(699.2430556,
55.21180556, 272.2604167, 2077.253472, 735.1770833, 193.125,
13.25347222, 81.19444444, 81.28125, 115.2881944, 1015.260417,
0.5, 216.21875, 1471.298611, 10.13194444, 182.2673611, 178.2743056,
10.24652778, 143.2013889, 194.2881944, 13.28125, 122.2291667,
115.2743056, 154.2395833, 1026.28125, 112.25, 11.27083333, 924.1076389,
21.27986111, 0.1, 78.26388889, 110.1805556, 419.2638889, 185.2291667,
140.1840278, 13.26388889, 157.2256944, 126.2847222, 1860.246528,
150.21875, 13.26041667, 12.28472222, 12.29166667, 27.20833333,
185.25, 168.21875, 84.19097222, 479.2569444, 101.2708333, 1120.243056,
12.21527778, 13.17708333, 164.2013889, 115.2708333, 294.28125,
150.15625, 13.18055556, 164.28125, 125.28125, 539.1701389, 138.2291667,
18.28819444, 269.25, 518.2847222, 1505.131944, 1153.28125, 238.21875,
202.25, 11.19513889, 4.034722222, 311.2569444, 206.2777778, 1699.246528,
217.2777778, 175.2465278, 13.28472222, 122.1631944, 448.2395833,
6.274305556, 196.1458333, 171.2708333, 1349.229167, 101.5590278,
13.24652778, 13.58680556, 181.4340278, 96.16666667, 136.2881944,
1153.295139, 553.2569444, 131.2638889, 1629.260417, 143.2361111,
300.2673611, 3.1875, 237.2361111, 130.2777778, 363.1840278, 105.2708333,
150.1770833)), .Names = c("hematoma", "follow.up"), row.names = c(NA,
100L), class = "data.frame")

"object ... not found" with randomForest

I am quite new to R world. I'm currently working on a flight delay prediction.
I'm getting "object 'date01-01-2004' not found" even though it is present.
I tried converting all the factors into dummy variables and doing random forest on it.
library(caret)
library(dummies)
library(randomForest)
flight<-read.csv("E:\\Rdata\\FlightDelays.csv",header = TRUE)
summary(flight$dest)
summary(flight$carrier)
plot(flight$delay~flight$carrier,ylab="delay",xlab="carrier")
plot(flight$delay~flight$dest,ylab="delay",xlab="destination")
plot(flight$delay~flight$origin,ylab="delay",xlab="origin")
plot(flight$delay~flight$dayweek,ylab="delay",xlab="dayweek")
str(flight)
flight$tailnu<-NULL
fl1<-flight$delay
flight$delay<-NULL
flight<-dummy.data.frame(data=flight)
dput(head(flight,50))
flight$delay<-fl1
rf1<-randomForest(delay~.,data=flight)
The output should not be an error and random forest computed one.But I'm getting following output even though it contains date01-01-200 .
structure(list(schedtime = c(1455L, 1640L, 1245L, 1715L, 1039L,
840L, 1240L, 1645L, 1715L, 2120L, 2120L, 1455L, 930L, 1230L,
1430L, 1730L, 2030L, 1530L, 600L, 1830L, 900L, 1300L, 1400L,
1500L, 1900L, 850L, 900L, 1100L, 1300L, 1500L, 1700L, 2100L,
1455L, 1720L, 1030L, 700L, 1300L, 1730L, 840L, 1710L, 1245L,
2120L, 1700L, 1900L, 1525L, 1900L, 1400L, 1515L, 1300L, 1630L
), carrierCO = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), carrierDH = c(0L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), carrierDL = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), carrierMQ = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), carrierOH = c(1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), carrierRU = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), carrierUA = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), carrierUS = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), deptime = c(1455L,
1640L, 1245L, 1709L, 1035L, 839L, 1243L, 1644L, 1710L, 2129L,
2114L, 1458L, 932L, 1228L, 1429L, 1728L, 2029L, 1525L, 556L,
1822L, 853L, 1254L, 1356L, 1452L, 1853L, 841L, 858L, 1056L, 1253L,
1458L, 1655L, 2055L, 1452L, 1710L, 1030L, 656L, 1256L, 1726L,
840L, 1704L, 1245L, 2118L, 1651L, 1850L, 1521L, 1855L, 1357L,
1508L, 1255L, 1625L), destEWR = c(0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), destJFK = c(1L,
1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), destLGA = c(0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L,
0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L), distance = c(184L, 213L, 229L, 229L,
229L, 228L, 228L, 228L, 228L, 228L, 229L, 213L, 214L, 214L, 214L,
214L, 214L, 213L, 213L, 213L, 214L, 214L, 214L, 214L, 214L, 229L,
214L, 214L, 214L, 214L, 214L, 214L, 169L, 169L, 169L, 169L, 199L,
199L, 213L, 213L, 213L, 213L, 213L, 213L, 199L, 199L, 199L, 213L,
213L, 199L), `date01-01-2004` = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), `date01-02-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date01-03-2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date01-04-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date01-05-2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date01-06-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date01-07-2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date01-08-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date01-09-2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date01-10-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date01-11-2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date01-12-2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/13/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/14/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/15/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/16/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/17/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/18/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/19/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/20/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/21/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/22/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/23/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/24/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/25/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/26/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/27/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/28/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/29/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), `date1/30/2004` = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), `date1/31/2004` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), flightnumber = c(5935L,
6155L, 7208L, 7215L, 7792L, 7800L, 7806L, 7810L, 7812L, 7814L,
7924L, 746L, 1746L, 1752L, 1756L, 1762L, 1768L, 4752L, 4760L,
4784L, 4956L, 4964L, 4966L, 4968L, 4976L, 846L, 2164L, 2168L,
2172L, 2176L, 2180L, 2188L, 2403L, 2675L, 2303L, 2703L, 808L,
814L, 7299L, 7302L, 7303L, 7304L, 2497L, 2385L, 2261L, 2336L,
2216L, 2156L, 2664L, 2181L), originBWI = c(1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), originDCA = c(0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
1L), originIAD = c(0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L,
1L, 0L, 0L, 0L, 1L, 1L, 0L), weather = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), dayweek = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L), daymonth = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("schedtime", "carrierCO",
"carrierDH", "carrierDL", "carrierMQ", "carrierOH", "carrierRU",
"carrierUA", "carrierUS", "deptime", "destEWR", "destJFK", "destLGA",
"distance", "date01-01-2004", "date01-02-2004", "date01-03-2004",
"date01-04-2004", "date01-05-2004", "date01-06-2004", "date01-07-2004",
"date01-08-2004", "date01-09-2004", "date01-10-2004", "date01-11-2004",
"date01-12-2004", "date1/13/2004", "date1/14/2004", "date1/15/2004",
"date1/16/2004", "date1/17/2004", "date1/18/2004", "date1/19/2004",
"date1/20/2004", "date1/21/2004", "date1/22/2004", "date1/23/2004",
"date1/24/2004", "date1/25/2004", "date1/26/2004", "date1/27/2004",
"date1/28/2004", "date1/29/2004", "date1/30/2004", "date1/31/2004",
"flightnumber", "originBWI", "originDCA", "originIAD", "weather",
"dayweek", "daymonth"), dummies = structure(list(carrier = 2:9,
dest = 11:13, date = 15:45, origin = 47:49), .Names = c("carrier",
"dest", "date", "origin")), row.names = c("1", "2", "3", "4",
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26",
"27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37",
"38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48",
"49", "50"), class = "data.frame")
Error in eval(predvars, data, env) : object 'date01-01-2004' not found
My guess (strongly supported by the example below) is that randomForest() can't handle non-syntactic variable/column names, i.e. ones with spaces or punctuation other than dots in them. You could try names(flight) <- make.names(names(flight)) to fix this. It's surprising that read.csv() didn't already fix the names for you: are you sure you didn't use readr::read_csv() instead?
library(randomForest)
## make up random frame with OK names
dd <- data.frame(y=rnorm(1000),x1=rnorm(1000),x2=rnorm(1000))
r1 <- randomForest(y~., data=dd) ## this works fine
Now modify the names to include a predictor with dashes in its name:
names(dd)[3] <- "a-b-c"
r2 <- randomForest(y~., data=dd)
Error in eval(predvars, data, env) : object 'a-b-c' not found
Now fix the names using make.names():
names(dd) <- make.names(names(dd))
r3 <- randomForest(y~., data=dd) ## works
What did make.names() do?
names(dd)
## [1] "y" "x1" "a.b.c"

Extract n rows before and after a value in a data frame

I have a data frame with certain values in a Mark column. I want to extract n values before and after a mark occurs (including the row with the mark).
I find the values I need by using indices <- which(df$Mark == 1) where 1 is the value I'm looking for. Now I need for example the indices of 5 rows before that and 5 rows after (and the one with the mark, so 11 rows in total).
I was thinking about looping through the indices to increase and decrease it by n, and then to subset the data frame with the appended indices. It would be quite nasty though.
Is there a faster way to do it? e.g. in dplyr? Base R answer will be fine as well.
PS: I read the similar question but it doesn't seem to fit my problem.
Here's the df:
df <- structure(list(CH1 = c(-0.02838132, -0.02642141, -0.02511601,
-0.02443906, -0.02414024, -0.02417388, -0.02451562, -0.02393946,
-0.02242496, -0.02104852, -0.0198534, -0.018965, -0.01853905,
-0.01837877, -0.01857743, -0.01847437, -0.0176798, -0.01672419,
-0.01594565, -0.01522826, -0.01485198, -0.01484227, -0.01507997,
-0.01556828, -0.01534458, -0.01473233, -0.01376753, -0.01251296,
-0.0116294, -0.01064516, -0.00966026, -0.00970934, -0.00969434,
-0.00921217, -0.00881855, -0.00832315, -0.00793322, -0.00718289,
-0.00643288, -0.00574532, -0.00535603, -0.00503564, -0.00469125,
-0.00449608, -0.00426023, -0.00406978, -0.00401041, -0.00293273,
-0.00154294, -0.0012401, -0.00108466, -0.00116468, -0.00121755,
-0.00127168, -0.00099938, 0.00017319, 0.0019737, 0.00333815,
0.00396771, 0.00439491, 0.00482015, 0.00515174, 0.0054591, 0.00657748,
0.00863549, 0.01048496, 0.01175601, 0.01272887, 0.01350854, 0.0140988,
0.01475749, 0.01568579, 0.0178412, 0.02036553, 0.02206326, 0.02315541,
0.0241971, 0.02509713, 0.02599812, 0.02695202, 0.02829221, 0.03048931,
0.03233365, 0.03385062, 0.03544046, 0.03690707, 0.03846173, 0.03980747,
0.04145224, 0.04344824, 0.04491818, 0.04621653, 0.04728952, 0.04851875,
0.04968494, 0.05085734, 0.05207405, 0.05288386, 0.05377864, 0.05486108,
0.05593761, 0.0570737, 0.05811917, 0.0593426, 0.06005302, 0.05993605,
0.05984828, 0.06032347, 0.06089914, 0.06177185, 0.06246712, 0.06323557,
0.06413276, 0.06416812, 0.06303713, 0.06264461, 0.06301019, 0.06348586,
0.06426832, 0.06509175, 0.06570335, 0.06598329, 0.06489886, 0.06344099,
0.06281661, 0.06292738, 0.0630922, 0.06334323, 0.06376194, 0.0640305,
0.06399924, 0.06292669, 0.06141425, 0.06046086, 0.06002845, 0.05977921,
0.05952547, 0.05947563, 0.05888767, 0.05753626, 0.05571093, 0.05391346,
0.053135, 0.05240138, 0.05196891, 0.05157123, 0.05107314, 0.05004111,
0.04812315, 0.04601065, 0.04457145, 0.04376672, 0.04318091, 0.04265054,
0.04222059, 0.041618, 0.0403326, 0.03810122, 0.03623468, 0.03515417,
0.0343935, 0.03381848, 0.03330182, 0.03288956, 0.03268627, 0.03136984,
0.02941283, 0.02847409, 0.02766387, 0.0268678, 0.02645577, 0.02606292,
0.02592612, 0.0258327, 0.02477442, 0.02381663, 0.02342893, 0.02307516,
0.02289283, 0.02281655, 0.02268435, 0.02245292, 0.02224212, 0.02203094,
0.02189966, 0.02157357, 0.02129673, 0.02102508, 0.02140636, 0.02188274,
0.02238155, 0.02332248, 0.02454547, 0.02617604, 0.0281874, 0.03046315,
0.03274331, 0.03508138, 0.03754183, 0.04001183, 0.04252412, 0.04485972,
0.04726444, 0.04945699, 0.05171933, 0.05405642, 0.05621058, 0.05858717,
0.06119974, 0.0631874, 0.06494498, 0.06654966, 0.06778654, 0.06895418,
0.0702159, 0.07208018, 0.07471886, 0.07640609, 0.07795521, 0.07929013,
0.08029186, 0.08135373, 0.08218034, 0.08313267, 0.08513113, 0.08683419,
0.08791834, 0.08894015, 0.08975692, 0.09043255, 0.09113128, 0.09186111,
0.09291916, 0.09414985, 0.09492029, 0.09583852, 0.09664483, 0.09738685,
0.09791321, 0.09827693, 0.09842386, 0.09819575, 0.09783525, 0.09711579,
0.09588714, 0.09464117, 0.09342161, 0.09221725, 0.09094498, 0.08979087,
0.08813678, 0.08722136, 0.08660734, 0.0863056, 0.08614786, 0.08576027,
0.08508192, 0.08408207, 0.08224716, 0.0805236, 0.0793857, 0.07835744,
0.07776693, 0.07704602, 0.0762578, 0.0748622, 0.07237066, 0.06983608,
0.06798425, 0.06677078, 0.0660528, 0.06569698, 0.06521391, 0.06434717,
0.06249718, 0.06009818, 0.05800739, 0.05674874, 0.05583431, 0.05525231,
0.05479279, 0.05451269, 0.05392969, 0.05218898, 0.05015828, 0.04889652,
0.04834132, 0.04789649, 0.04757991, 0.04729923, 0.04713846, 0.04664839,
0.044963, 0.0434754, 0.04290805, 0.04229798, 0.04186826, 0.04133299,
0.04069157, 0.03980917, 0.03850414, 0.03609292, 0.03422226, 0.03281199,
0.03131085, 0.03030436, 0.02957696, 0.02881902, 0.02801267, 0.0266918,
0.02524513, 0.02468021, 0.02422629, 0.02412119, 0.02414609, 0.02431383,
0.02445115, 0.02420395, 0.02307613, 0.0225228, 0.02239294, 0.02228146,
0.02247078, 0.02297619, 0.02339916, 0.02380192, 0.02367893, 0.02331219,
0.02357285, 0.0239001, 0.02413282, 0.02442478, 0.02460252, 0.02484779,
0.02539408, 0.02547098, 0.02568989, 0.02612677, 0.02653343, 0.02691505,
0.02732947, 0.02783551, 0.02845577, 0.0294369, 0.03000503, 0.0303594,
0.03106044, 0.03183592, 0.03254643, 0.03336877, 0.03433665, 0.03611183,
0.03759354, 0.03864425, 0.03966344, 0.04067133, 0.04175726, 0.04283931,
0.04391302, 0.04588513, 0.04825597, 0.04982677, 0.05137081, 0.05256286,
0.05363528, 0.05468207, 0.05576433, 0.05764562, 0.06039843, 0.06209074,
0.06330606, 0.06437107, 0.06532845, 0.06612719, 0.06689882, 0.06780636,
0.06962782, 0.07139035, 0.07266567, 0.07378628, 0.07471222, 0.07541681,
0.07637413, 0.07729325, 0.07797043, 0.07928976, 0.08020929, 0.08104116,
0.08185486, 0.08268223, 0.08352671, 0.08418175, 0.08467345, 0.0845037,
0.08452599, 0.08504328, 0.08524517, 0.08562133, 0.08602719, 0.08630189,
0.08619381, 0.08511638, 0.08378159, 0.08298928, 0.08275849, 0.08255187,
0.08253576, 0.08248511, 0.08237054, 0.08131169, 0.07927644, 0.07758952,
0.07666323, 0.07611373, 0.07583219, 0.07563592, 0.07526416, 0.07413918,
0.07218219, 0.07052977, 0.06947646, 0.06885928, 0.06852632, 0.06836134,
0.06829559, 0.06804968, 0.06684561, 0.06508074, 0.06383415, 0.06333059,
0.06309205, 0.06312215, 0.06308869, 0.06325907, 0.06330066, 0.06230686,
0.06121331, 0.06093323, 0.06080826, 0.06103985, 0.06129866, 0.0616675,
0.06222659, 0.06271791, 0.06269919, 0.06317165, 0.06388476, 0.06443688,
0.06532656, 0.06643683, 0.06762666, 0.0688545, 0.06957003, 0.07049679,
0.07145847, 0.07254429, 0.07379688, 0.07520389, 0.07666438, 0.07813754,
0.07980724, 0.08164999, 0.08337331, 0.0850293, 0.08675431, 0.08850279,
0.0903589, 0.09223478, 0.09399396, 0.09617301, 0.09825616, 0.1001754,
0.10215286, 0.10405939, 0.10593522, 0.10771114, 0.10955779, 0.11137673,
0.11350922, 0.11566091, 0.11786379, 0.1201627, 0.12245044, 0.12446617,
0.12668717, 0.12880468, 0.13083965, 0.13320723, 0.13573529, 0.13813868,
0.14067729, 0.14306904, 0.14548148, 0.14758988, 0.14929967, 0.150388,
0.15233791, 0.15449043, 0.15652253, 0.15867107, 0.16075753, 0.16281015,
0.16490422, 0.16620035, 0.16787185, 0.16964339, 0.17125645, 0.17307489,
0.17497104, 0.1767696, 0.17835094, 0.1791379, 0.17976147, 0.18114665,
0.18252681, 0.18401302, 0.18556376, 0.18716799, 0.18869627, 0.18947925,
0.18952475, 0.19017635, 0.19119224, 0.19240457, 0.19406083, 0.19560736,
0.19702311, 0.19838278, 0.19857232, 0.19853884, 0.19905365, 0.19978584,
0.20052382, 0.20136617, 0.20214938, 0.20287189, 0.20312707, 0.20246537,
0.20244905, 0.20259959, 0.20278233, 0.20327239, 0.20340601, 0.20375103,
0.20409654, 0.2038635, 0.20327988, 0.20336974, 0.20360702, 0.20394714,
0.20437293, 0.20460138, 0.20475748, 0.20456536, 0.20375752, 0.20371552,
0.20368604, 0.20359299, 0.2035453, 0.20345831, 0.20340526, 0.20343742,
0.20276403, 0.20228943, 0.20203541, 0.20188482, 0.2018925, 0.20187522,
0.20192079, 0.20182329, 0.20151561, 0.20119683, 0.20101932, 0.20076922,
0.20026171, 0.19982927, 0.19950271, 0.19908488, 0.19889168, 0.19908054,
0.19908604, 0.19869895, 0.1984064, 0.1980564, 0.19761464, 0.19729775,
0.19710955, 0.1974078, 0.19742712, 0.19735026, 0.19726095, 0.19695149,
0.19679484, 0.19663087, 0.19647489, 0.19718868, 0.19785891, 0.19784996,
0.19788255, 0.19757998, 0.19728665, 0.19721918, 0.19730429, 0.19846697,
0.19968045, 0.19982629, 0.20010276, 0.20030209, 0.20027906, 0.2004303,
0.20071957, 0.20170523, 0.20357136, 0.20445201, 0.20511229, 0.2053825,
0.20552762, 0.2057181, 0.20584874, 0.20681113, 0.20865934, 0.20982285,
0.21037306, 0.21086055, 0.21114743, 0.21141832, 0.21172704, 0.21270722,
0.21425499, 0.21508047, 0.21540311, 0.21570137, 0.21566178, 0.2157706,
0.2157407, 0.21586709, 0.21686926, 0.21775885, 0.21800305, 0.21835183,
0.21890219, 0.21994038, 0.22143123, 0.22224599, 0.22288845, 0.22398168,
0.22474541, 0.22512311, 0.22491746, 0.2245485, 0.22401106, 0.22340615,
0.22256076, 0.22140816, 0.22045675, 0.21932106, 0.21813713, 0.21674703,
0.21546952, 0.21415956, 0.21265213, 0.21120454, 0.20967419, 0.2082095,
0.20655277, 0.20475774, 0.20279387, 0.20076135, 0.19890919, 0.19709851,
0.19524029, 0.19323021, 0.19112383, 0.18902898, 0.18701997, 0.18506767,
0.18315709, 0.18136762, 0.17967033, 0.1778329, 0.17634939, 0.17506276,
0.17422849, 0.17365934, 0.17368531, 0.17453934, 0.17546247, 0.17564483,
0.17587478, 0.17576717, 0.17500107, 0.1736709, 0.17258336, 0.17265072,
0.17284319, 0.17171922, 0.16994849, 0.16780928, 0.16595082, 0.16508843
), Mark = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("CH1",
"Mark"), row.names = c(NA, 700L), class = "data.frame")
You don't need dplyr, you can use indexing in base R.
inds = which(df$Mark == 1)
# We use lapply() to get all rows for all indices, result is a list
rows <- lapply(inds, function(x) (x-5):(x+5))
# With unlist() you get all relevant rows
df[unlist(rows),]
I just solved a similar problem with the shift function from data.table. Basically I use shift in the i statement of the data table:
library(data.table)
df[Mark == 1 | shift(Mark==1, n=5L, type = "lag") | shift(search==1, n=5L, type = "lead")]
I always find data.table to be really intuitive.

function to format dates not working R

I have written a wrapper function to format dates within a data frame to either a Monday or a Sunday using lubridate's floor_date function, and am receiving a rather opaque error message.
The function looks like:
week_format<-function(data,date,day){
if(typeof(data)!="list") { stop("Error, data should be a data.frame")}
ifelse(day=="MON",day<-1,day<-7)
data$date<- floor_date( data$date - days(1),"week") + days(day)
return(data)
}
When I attempt to use the function :
week_format(dataset,wc_Monday,"MON")
I get error:
Error in slot(object, name) :
cannot get a slot ("call") from an object of type "double"
I am unsure what this error means, and cannot recreate it outside the function :
data$date<- floor_date( data$date - days(1),"week") + days(7)
Works without error.
I should add data$date is already formatted as a date in R.
Here is a dput of the data:
structure(list(X.8 = 1:178, wc_Monday = structure(c(15341, 15348,
15355, 15362, 15369, 15376, 15383, 15390, 15397, 15404, 15411,
15418, 15425, 15432, 15439, 15446, 15453, 15460, 15467, 15474,
15481, 15488, 15495, 15502, 15509, 15516, 15523, 15530, 15537,
15544, 15551, 15558, 15565, 15572, 15579, 15586, 15593, 15600,
15607, 15614, 15621, 15628, 15635, 15642, 15649, 15656, 15663,
15670, 15677, 15684, 15691, 15698, 15705, 15712, 15719, 15726,
15733, 15740, 15747, 15754, 15761, 15768, 15775, 15782, 15789,
15796, 15803, 15810, 15817, 15824, 15831, 15838, 15845, 15852,
15859, 15866, 15873, 15880, 15887, 15894, 15901, 15908, 15915,
15922, 15929, 15936, 15943, 15950, 15957, 15964, 15971, 15978,
15985, 15992, 15999, 16006, 16013, 16020, 16027, 16034, 16041,
16048, 16055, 16062, 16069, 16076, 16083, 16090, 16097, 16104,
16111, 16118, 16125, 16132, 16139, 16146, 16153, 16160, 16167,
16174, 16181, 16188, 16195, 16202, 16209, 16216, 16223, 16230,
16237, 16244, 16251, 16258, 16265, 16272, 16279, 16286, 16293,
16300, 16307, 16314, 16321, 16328, 16335, 16342, 16349, 16356,
16363, 16370, 16377, 16384, 16391, 16398, 16405, 16412, 16419,
16426, 16433, 16440, 16447, 16454, 16461, 16468, 16475, 16482,
16489, 16496, 16503, 16510, 16517, 16524, 16531, 16538, 16545,
16552, 16559, 16566, 16573, 16580), class = "Date"), Payday = c(0L,
0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
0L), Friday_Payday = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Good_Friday = c(0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("X.8",
"wc_Monday", "Payday", "Friday_Payday", "Good_Friday"), row.names = c(NA,
-178L), class = "data.frame")
So I have solved this by changing the indexation :
However I am unsure as to why this would fix the error if anyone could expand on the differences between $ and [,] I would be grateful.
week_format<-function(data,date,day){
if(typeof(data)!="list") { stop("Error, data should be a data.frame")}
ifelse(day=="MON",day<-1,day<-7)
data[,date]<- floor_date( data[,date] - days(1),"week") + days(day)
return(data)
}
Ok, you should change your code to
week_format<-function(mdat, mslot, day){
if(typeof(mdat)!="list") {
stop("Error, data should be a data.frame")
}
day <- if (day == "MON") 1 else 7
mdat[[mslot]] <- floor_date(mdat[[mslot]] - days(1), "week") + days(day)
return(data)
}
And then you should call your function like this
week_format(data, "wc_Monday", "MON")

R: Help in melting a data frame "with differing rows"

I have a data frame that I cannot reshape2 :: melt. Can anyone help me see why?
> dput(x2)
structure(list(`26492` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L), `28728` = c(0L, NA, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("26492", "28728"), class = c("data.table",
"data.frame"), row.names = c(NA, -286L), .internal.selfref = <pointer: 0x0000000000330788>)
> melt(x2)
Using as id variables
Error in data.frame(ids, variable, value, stringsAsFactors = FALSE) :
arguments imply differing number of rows: 0, 572
I also created this data frame with a NA value inside and melt works, so I'm not sure where the problem is.
> df1 <- data.frame(x = rnorm(2), y = rnorm(2))
> df1[1,1]<-NA
> df1
x y
1 NA -1.0138754
2 -0.7848228 0.3117672
> melt(df1)
Using as id variables
variable value
1 x NA
2 x -0.7848228
3 y -1.0138754
4 y 0.3117672
data.frames and data.tables, while related, are different beasts and should be treated differently. This is why in data.table Version 1.8.11, a new melt method was provided.
To summarize what I found, using melt.data.frame will give you this error on a data.table but not on a data.frame, so you should either use as.data.frame(YOUR_DATA_TABLE) or (recommended) update your version of data.table.
Example:
library(reshape2)
library(data.table)
packageVersion("data.table")
# [1] ‘1.8.11’
## WORKS WITH WARNING THAT YOU DID NOT
## SUPPLY ID AND MEASURE VARIABLES
data.table:::melt.data.table(x2)
# variable value
# 1: 26492 0
# 2: 26492 0
# 3: 26492 0
# 4: 26492 0
# 5: 26492 0
# ---
# 568: 28728 0
# 569: 28728 0
# 570: 28728 0
# 571: 28728 0
# 572: 28728 0
# Warning message:
# In data.table:::melt.data.table(x2) :
# To be consistent with reshape2's melt, id.vars and measure.vars
# are internally guessed when both are 'NULL'. All non-numeric/integer/
# logical type columns are conisdered id.vars, which in this case are
# columns ''. Consider providing at least one of 'id' or 'measure' vars
# in future.
So, with data.table 1.8.11 and up, which introduce this new melt method, things work. Where's the error you speak of?
## HERE'S YOUR ERROR
reshape2:::melt.data.frame(x2)
# Using as id variables
# Error in data.frame(ids, variable, value, stringsAsFactors = FALSE) :
# arguments imply differing number of rows: 0, 572
## HERE'S A WORKAROUND
head(reshape2:::melt.data.frame(as.data.frame(x2)))
Using as id variables
# variable value
# 1 26492 0
# 2 26492 0
# 3 26492 0
# 4 26492 0
# 5 26492 0
# 6 26492 0
This works with your small example too.
df1 <- data.frame(x = rnorm(2), y = rnorm(2))
df1[1,1]<-NA
DT <- data.table(df1)
reshape2:::melt.data.frame(DT) ## ERROR
reshape2:::melt.data.frame(as.data.frame(DT)) ## NO ERROR
data.table:::melt.data.table(DT) ## Warning. NO ERROR
Update
If there is an ID var specified, it appears that this error does not occur:
df1 <- data.frame(matrix(rnorm(6), ncol = 3))
df1[1, 2] <- NA
df1
DT <- data.table(df1)
reshape2:::melt.data.frame(DT, id.vars="X1") ## NO ERROR
# X1 variable value
# 1 1.3586796 X2 NA
# 2 -0.1027877 X2 -0.05380504
# 3 1.3586796 X3 -1.37705956
# 4 -0.1027877 X3 -0.41499456
data.table:::melt.data.table(DT, id.vars="X1") ## NO ERROR
# X1 variable value
# 1: 1.3586796 X2 NA
# 2: -0.1027877 X2 -0.05380504
# 3: 1.3586796 X3 -1.37705956
# 4: -0.1027877 X3 -0.41499456

Resources