使用mutate基于数据帧中的列子集进行插值

时间:2016-02-10 17:00:20

标签: r dplyr

我很难搞清楚如何使用mutate根据列的子集进行线性插值。我可以在for循环中使用approx函数并获得我正在寻找但我收到错误Error in xy.coords(x, y) : (list) object cannot be coerced to type 'double'.

df <- data.frame(Jan = rep(0,10), Feb = 1:10, Mar = 2*(1:10), Apr = 3*(1:10), val=c(3,6,2,12,4,8,3,5,22,14))
x <- c(31,60,91,121)

以下 for 循环有效:

for(i in 1:dim(df)[1])
{
    df$m[i] <- approx(cbind(0, df[i,1:4]), x, df$val[i])[2]
}

我试图用mutate

获得相同的结果
s<-mutate(df, m=approx(cbind(0, df[,1:4]), x, val)[2])

但上面的代码行给了我错误信息。有什么帮助来解释我哪里出错了?

1 个答案:

答案 0 :(得分:0)

您可以使用rowwise在每行执行插值

df %>%
  rowwise() %>%
  mutate(m = approx(c(Jan, Feb, Mar, Apr), x, val)[[2]])