【问题标题】:Using approx() with groups in dplyr将 approx() 与 dplyr 中的组一起使用
【发布时间】:2020-11-29 12:19:35
【问题描述】:

我正在尝试使用 approx() 和 dplyr 在现有数组中插入值。我的初始代码如下所示...

p = c(1,1,1,2,2,2)
q = c(1,2,3,1,2,3)
r = c(1,2,3,4,5,6)

Inputs<- data.frame(p,q,r)

new.inputs= as.numeric(c(1.5,2.5))

library(dplyr)

Interpolated <- Inputs %>%
        group_by(p) %>%
        arrange(p, q) %>%
        mutate(new.output=approx(x=q, y=r, xout=new.inputs)$y)

我希望看到 1.5、2.5、4.5、5.5,但我得到了

错误:大小不兼容 (2),需要 3(组大小)或 1

谁能告诉我哪里出错了?

【问题讨论】:

  • 您如何期望mutate 获得的行数少于您的数据框?试试这个Inputs %&gt;% group_by(p) %&gt;% arrange(p, q) %&gt;% mutate(new.output=paste(approx(x=q, y=r, xout=new.inputs)$y, collapse = ',')) 找出你想要什么
  • 如此明显!我真正想要的是生成一个仅包含组 (p)、新输入 (q') 和新输出 (r') 的新数据帧,因此是一个 4 x 3 数组。我想我可以使用 dplyr 为每个组重复插值。现在我想我必须创建一个以 group 和 new.input 作为输入的函数。这听起来像是一个更好的计划吗?

标签: r dplyr


【解决方案1】:

您可以使用dplyr 获得您期望的值。

library(dplyr)
Inputs %>%
  group_by(p) %>%
  arrange(p, q, .by_group = TRUE) %>%
  summarise(new.outputs = approx(x = q, y = r, xout = new.inputs)$y)

#     p  new.outputs
#  <dbl>       <dbl>
#     1         1.5
#     1         2.5
#     2         4.5
#     2         5.5

您还可以使用来自plyr 的ddply 函数获取您期望的值。

library(plyr)

# Output as coordinates
ddply(Inputs, .(p), summarise, new.output = paste(approx(
  x = q, y = r, xout = new.inputs
)$y, collapse = ","))

# p new.output
# 1    1.5,2.5
# 2    4.5,5.5

#######################################

# Output as flattened per group p
ddply(Inputs,
      .(p),
      summarise,
      new.output = approx(x = q, y = r, xout = new.inputs)$y)

# p new.output
# 1        1.5
# 1        2.5
# 2        4.5
# 2        5.5

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2021-09-07
    • 2017-12-29
    • 2015-03-16
    相关资源
    最近更新 更多