R申请两个数据帧

时间:2017-09-21 09:03:39

标签: r apply

我可以想象,答案可以在stackoverflow找到,但后来我不明白。所以这是我的问题:

我有一个data.frame" tmp"它由17列和许多行组成。 我想要做的是使用apply函数逐行使用带有tmp信息的近似函数:

tmp[,17] <- apply(tmp[,4:16], 1, approx, y = y, x = tmp[,2])

其中y是固定的。

我的问题是,我现在得到一个n x n-Matrix,因为apply函数计算每对tmp[,4:16]tmp[,2]。我需要的只是对角线,即

(tmp[1,4:16], tmp[1,2]), (tmp[2,4:16], tmp[2,2]), (tmp[3,4:16], tmp[3,2]),...

我想避免使用diag(apply(...))或循环,因为我想减少计算时间。

我希望有人可以帮助我,并提前非常感谢你

1 个答案:

答案 0 :(得分:0)

这是你想要的吗?请注意,tmp[, 4:16]tmp[, 2]都使用相同的行i

set.seed(4542)  # make it reproducible

tmp <- as.data.frame(matrix(rnorm(20*17), ncol = 17))
y <- rnorm(length(4:16))

s <- sapply(seq_along(tmp[, 1]), function(i) approx(y, tmp[i, 4:16], tmp[i, 2]))

而不是seq_along(tmp[, 1])也可以使用seq_len(nrow(tmp))