【发布时间】:2020-01-09 16:25:37
【问题描述】:
我有 2 个 dfs:df & xdf。
df <- tibble(id = c("a", "a", "a", "a", "b", "b", "b", "b"),
x = c(1, 2, 3, 4, 1, 2, 3, 4),
y = c(0.2, 0, 0.9, 7, 1, 0.3, 5, 5.1))
xdf <- tibble(id = c("a", "b"),
x = c(2, 3.5))
在 df 中,在“id”列中,对于组 (a 和 b),我只想插入与相同 id 匹配的 xdf 行名称与 df 相同。我怎样才能做到?我尝试了以下命令,但 xdf$x 的所有值都为每个组插入。
ndf <- df %>%
group_by(id) %>%
do(add_row(., id = .$id[1], x = xdf$x))
> ndf
# A tibble: 12 x 3
# Groups: id [2]
id x y
<chr> <dbl> <dbl>
1 a 1 0.2
2 a 2 0
3 a 3 0.9
4 a 4 7
5 a 2 NA
6 a 3.5 NA
7 b 1 1
8 b 2 0.3
9 b 3 5
10 b 4 5.1
11 b 2 NA
12 b 3.5 NA
# expected result should be : ndf <- ndf[c(-6,-11),]
我的最终目标是用 approx() 函数填充这些 ndf 的新生儿NA。但是我的问题仍然存在,因为我使用的是调用多余值的 xout = xdf$x 。我该如何克服呢?你能帮忙写一个使 xout 变化的函数吗?
f <- function(z)
{
fdf <- approx(z$x, z$y, xout = xdf$x, method = "linear")
return(data.frame(nx= fdf$x, y.out = fdf$y, id = unique(z$id)))
}
jdf <- as.data.frame(ddply(ndf, .(id), f))
zdf <- subset(jdf, select = c(id, nx, y.out))
> zdf
id nx y.out
1 a 2.0 0.00
2 a 3.5 3.95
3 b 2.0 0.30
4 b 3.5 5.05
# expected results
id nx y.out
1 a 2.0 0.00
2 b 3.5 5.05
欢迎任何有用的提示。非常感谢!
【问题讨论】:
-
您在寻找
bind_rows(df, xdf)吗?至少在你的情况下,这会产生你想要的输出。 -
bind_rows(df, xdf)不是我想要的,因为dim(zdf)仍然是 4*3。我想要 zdf 中的一个输出值,ndf 中的一个输入值。还是谢谢。 -
您能否添加一个示例,其中所需的输出与使用 bind_rows 不同?
-
ndf <- df %>% group_by(id) %>% do(add_row(., id = .$id[1], x = xdf$x))给dim(ndf)12*3。bind_rows(df, xdf)给出一个昏暗 10*3 的小标题。实际上,我想要的是 10*3 的dim(ndf)。你的回答是对的。但我最终得到的zdf太大了。我想要一个唯一值y.out用于唯一输入值a <- 2或b <- 3.5。我知道,这并不像听起来那么容易。谢谢。 -
这个独特的
y.out是如何定义的?
标签: r function dataframe dplyr interpolation