Tar*_*Jae 6 r dataframe dplyr tibble
这是如何将行添加到仅修改某些列的数据帧的后续问题。
解决这个问题后,我想将 stefan 提供的解决方案应用到更大的数据框group_by:
我的数据框:
df <- structure(list(test_id = c(1, 1, 1, 1, 1, 1, 1, 1), test_nr = c(1,
1, 1, 1, 2, 2, 2, 2), region = c("A", "B", "C", "D", "A", "B",
"C", "D"), test_value = c(3, 1, 1, 2, 4, 2, 4, 1)), class = "data.frame", row.names = c(NA,
-8L))
test_id test_nr region test_value
1 1 1 A 3
2 1 1 B 1
3 1 1 C 1
4 1 1 D 2
5 1 2 A 4
6 1 2 B 2
7 1 2 C 4
8 1 2 D 1
Run Code Online (Sandbox Code Playgroud)
我现在想使用以下代码向每个组添加一个新行,这会出现错误:
df %>%
group_by(test_nr) %>%
add_row(test_id = .$test_id[1], test_nr = .$test_nr[1], region = "mean", test_value = mean(.$test_value))
Error: Can't add rows to grouped data frames.
Run `rlang::last_error()` to see where the error occurred.
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
test_id test_nr region test_value
1 1 1 A 3.00
2 1 1 B 1.00
3 1 1 C 1.00
4 1 1 D 2.00
5 1 1 MEAN 1.75
6 1 2 A 4.00
7 1 2 B 2.00
8 1 2 C 4.00
9 1 2 D 1.00
10 1 2 MEAN 2.75
Run Code Online (Sandbox Code Playgroud)
到目前为止我已经尝试过:
library(tidyverse)
df %>%
group_by(test_nr) %>%
group_split() %>%
map_dfr(~ .x %>%
add_row(!!! map(.[4], mean)))
test_id test_nr region test_value
<dbl> <dbl> <chr> <dbl>
1 1 1 A 3
2 1 1 B 1
3 1 1 C 1
4 1 1 D 2
5 NA NA NA 1.75
6 1 2 A 4
7 1 2 B 2
8 1 2 C 4
9 1 2 D 1
10 NA NA NA 2.75
Run Code Online (Sandbox Code Playgroud)
如何修改第 1 列到第 3 列以将我的值放在那里?
事实上,我最近为此做了一个小辅助函数。用于group_modify()获取组数据的想法,以及bind_rows()使用 计算的汇总统计数据summarise()。
代码如下:
\nadd_summary_rows <- function(.data, ...) {\n group_modify(.data, function(x, y) bind_rows(x, summarise(x, ...)))\n}\nRun Code Online (Sandbox Code Playgroud)\n这里\xe2\x80\x99s 是如何处理你的数据的:
\nlibrary(dplyr, warn.conflicts = FALSE)\n\ndf <- data.frame(\n test_id = c(1, 1, 1, 1, 1, 1, 1, 1),\n test_nr = c(1, 1, 1, 1, 2, 2, 2, 2),\n region = c("A", "B", "C", "D", "A", "B", "C", "D"),\n test_value = c(3, 1, 1, 2, 4, 2, 4, 1)\n)\n\ndf %>% \n group_by(test_id, test_nr) %>% \n add_summary_rows(\n region = "MEAN",\n test_value = mean(test_value)\n )\n#> # A tibble: 10 x 4\n#> # Groups: test_id, test_nr [2]\n#> test_id test_nr region test_value\n#> <dbl> <dbl> <chr> <dbl>\n#> 1 1 1 A 3 \n#> 2 1 1 B 1 \n#> 3 1 1 C 1 \n#> 4 1 1 D 2 \n#> 5 1 1 MEAN 1.75\n#> 6 1 2 A 4 \n#> 7 1 2 B 2 \n#> 8 1 2 C 4 \n#> 9 1 2 D 1 \n#> 10 1 2 MEAN 2.75\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |