【发布时间】:2022-01-02 21:26:13
【问题描述】:
我有这个小标题:
library(tibble)
library(dplyr)
df <- tibble(id = c("one", "two", "three"),
A = c(1,2,3),
B = c(4,5,6))
id A B
<chr> <dbl> <dbl>
1 one 1 4
2 two 2 5
3 three 3 6
我想为每个组添加一行AND使用函数将值分配给新列BUT(这里每个组中的新行应该得到A=4 B = B 列的第一组值 USING first(B)-> 期望输出:
id A B
<chr> <dbl> <dbl>
1 one 1 4
2 one 4 4
3 three 3 6
4 three 4 6
5 two 2 5
6 two 4 5
到目前为止我已经尝试过:
如果我使用add_row 在未分组的小标题中添加一行 -> 这完美运行!
df %>%
add_row(A=4, B=4)
id A B
<chr> <dbl> <dbl>
1 one 1 4
2 two 2 5
3 three 3 6
4 NA 4 4
如果我尝试在分组的 tibble 中使用 add_row -> 这不起作用:
df %>%
group_by(id) %>%
add_row(A=4, B=4)
Error: Can't add rows to grouped data frames.
Run `rlang::last_error()` to see where the error occurred.
根据这篇文章Add row in each group using dplyr and add_row(),我们可以使用group_modify -> 这效果很好:
df %>%
group_by(id) %>%
group_modify(~ add_row(A=4, B=4, .x))
id A B
<chr> <dbl> <dbl>
1 one 1 4
2 one 4 4
3 three 3 6
4 three 4 4
5 two 2 5
6 two 4 4
我想将B 列的第一个值分配给B 列(或者它可以是任何函数min(B)、max(B) 等)-> 这不起作用:
df %>%
group_by(id) %>%
group_modify(~ add_row(A=4, B=first(B), .x))
Error in h(simpleError(msg, call)) :
Fehler bei der Auswertung des Argumentes 'x' bei der Methodenauswahl für Funktion 'first': object 'B' not found
【问题讨论】:
-
你能翻译“Fehler bei der Auswertung des Argumentes 'x' bei der Methodenauswahl für Funktion 'first': object 'B' not found”吗?
-
类似:在函数
first的方法选择中评估参数“x”时出错;找不到对象B。 -
first(.$B)为我工作。 -
如果我添加
first(.$B)我得到Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘first’ for signature ‘"numeric"’ -
group_modify(~ add_row(A=4, B=first(.x$B), .x))或group_modify(~ add_row(A=4, B=first(df$B), .x))怎么样?