Using your piece of data in a dat object, we can do what (I think) you need. First, we write a small wrapper function, which is suitable for a smoothing spline via smooth.spline() , and then predicts the response from this spline for a set of locations n . You are requesting n = 48 , so we will use this as the default value.
Here is one such wrapper function:
SSpline <- function(x, y, n = 48, ...) {
We check this for the first line of your data:
> res <- SSpline(time, dat[1, 2:9]) > res $x [1] 0.000000 0.893617 1.787234 2.680851 3.574468 4.468085 5.361702 [8] 6.255319 7.148936 8.042553 8.936170 9.829787 10.723404 11.617021 [15] 12.510638 13.404255 14.297872 15.191489 16.085106 16.978723 17.872340 [22] 18.765957 19.659574 20.553191 21.446809 22.340426 23.234043 24.127660 [29] 25.021277 25.914894 26.808511 27.702128 28.595745 29.489362 30.382979 [36] 31.276596 32.170213 33.063830 33.957447 34.851064 35.744681 36.638298 [43] 37.531915 38.425532 39.319149 40.212766 41.106383 42.000000 $y [1] 0.052349585 0.001126837 -0.049851737 -0.100341294 -0.150096991 [6] -0.198873984 -0.246427429 -0.292510695 -0.336721159 -0.378381377 [11] -0.416785932 -0.451229405 -0.481006377 -0.505411429 -0.523759816 [16] -0.535714043 -0.541224748 -0.540251293 -0.532753040 -0.518689349 [21] -0.498019582 -0.470750611 -0.437182514 -0.397727107 -0.352796426 [26] -0.302802508 -0.248157388 -0.189272880 -0.126447574 -0.059682959 [31] 0.011067616 0.085850805 0.164713260 0.247701633 0.334851537 [36] 0.425833795 0.519879613 0.616194020 0.713982047 0.812448724 [41] 0.910799082 1.008296769 1.104781306 1.200419068 1.295380186 [46] 1.389834788 1.483953003 1.577904960 > plot(time, dat[1, 2:9]) > lines(res, col = "blue")
which gives:

This seems to work, so now we can apply the data set function, save only the $y component of the object returned by SSpline() . To do this, we use apply() :
> res2 <- apply(dat[, 2:9], 1, + function(y, x, ...) { SSpline(x, y, ...)$y }, + x = time) > head(res2) 1 2 3 4 5 6 [1,] 0.052349585 -0.02500000 0.21250000 -0.06117869 -0.02153366 -0.02295792 [2,] 0.001126837 -0.04293509 0.17175460 -0.10994988 -0.06538250 -0.06191095 [3,] -0.049851737 -0.06407856 0.12846458 -0.15838412 -0.10899505 -0.10074427 [4,] -0.100341294 -0.09168227 0.08005550 -0.20614476 -0.15213426 -0.13933920 [5,] -0.150096991 -0.12899810 0.02395291 -0.25289514 -0.19456304 -0.17757705 [6,] -0.198873984 -0.17927793 -0.04241763 -0.29829862 -0.23604434 -0.21533911
Now res2 contains 48 rows and 6 columns, 6 columns refer to each dat row used here. If you want it the other way around, just rearrange res2 : t(res2) .
We can see what was done with a simple call to matplot() :
> matplot(x = seq(min(time), max(time), length = 48), + y = res2, type = "l")
which produces:
