gpt4 book ai didi

R 在特定值之前添加空行

转载 作者:行者123 更新时间:2023-12-01 22:56:10 26 4
gpt4 key购买 nike

我试图在每个特定值(截距)之前添加一个空行:

(我把三个线性回归模型汇总到一个dataframe中,我想用NA让dataframe看起来更好)

比如我的dataframe是这样的

var           coefficient     p_Value
(intercept) -17,22 0.2
speed 3.82 0.001
(intercept) -172,23 0.02
youtube 13.42 0.001
facebook 5.44 0.5
(intercept) 3.22 0.02
youtube 4.98 0.001
facebook 4.33 0.5
newspaper 1.22 0.11

我想要这样的结果:

var           coefficient     p_Value
(intercept) -17,22 0.2
speed 3.82 0.001
NA NA NA
(intercept) -172,23 0.02
youtube 13.42 0.001
facebook 5.44 0.5
NA NA NA
(intercept) 3.22 0.02
youtube 4.98 0.001
facebook 4.33 0.5
newspaper 1.22 0.11

我知道我可以根据行位置对空行进行硬编码,但我正在寻找更好的方法。与硬编码不同,我将来可能会有一个更复杂、更扩展的数据框架。我不想将它拆分成不同的列表或单独的数据帧,因为最终我会将这个数据帧写入 csv,这样使用 NA 时,我可以仅通过读取 csv 轻松地看到不同的模型。

感谢您的宝贵时间。

最佳答案

这里有一个 tidyverse 方法(更新后去掉了最后一行 NA)

library(tidyverse)
df |>
mutate(split = cumsum(ifelse(var == "(intercept)", 1, 0))) |>
group_by(split) |>
group_modify(.f = ~add_row(.data = .,
var = NA_character_)) |>
ungroup() |>
slice(-n())

# A tibble: 11 × 4
split var coefficient p_Value
<dbl> <chr> <chr> <dbl>
1 1 (intercept) -17,22 0.2
2 1 speed 3.82 0.001
3 1 NA NA NA
4 2 (intercept) -172,23 0.02
5 2 youtube 13.42 0.001
6 2 facebook 5.44 0.5
7 2 NA NA NA
8 3 (intercept) 3.22 0.02
9 3 youtube 4.98 0.001
10 3 facebook 4.33 0.5
11 3 newspaper 1.22 0.11

稍微快一点的解决方案(仍然给出相同的输出)。仍然比基本 R 解决方案慢 20 倍

df |> 
mutate(split = cumsum(ifelse(var == "(intercept)", 1, 0))) |>
group_split(split) |>
map(.f = ~add_row(.data = .x,
var = NA_character_)) |>
bind_rows() |>
slice(-n())

关于R 在特定值之前添加空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73203285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com