在R的 Dataframe 中的列的每个唯一值后添加一个空行

mzillmmw  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(126)

我想知道是否可以在下面的data中的每个study唯一值之后添加一个空行?
我的Desired_output在下面。

请注意,这是一个玩具数据。非常感谢您提供功能性答案。

data <- data.frame(study=c(rep(1,2),2:3), year=c(rep(2001,2),2002:2003))

Desired_output =
" study year
1     1 2001
2     1 2001
             # <- Blank row
3     2 2002
             # <- Blank row
4     3 2003"
xoshrz7s

xoshrz7s1#

可以使用group_split将数据按组拆分成一个 Dataframe 列表,然后在每个列表元素上Map一个函数,并使用map_dfr将它们的输出堆叠回一个 Dataframe 。

library(dplyr)
library(tibble)
library(purrr)

data %>% 
  group_split(study) %>% 
  map_dfr(~ add_row(.x, .after = Inf))
    • 产出**
study  year
  <dbl> <dbl>
1     1  2001
2     1  2001
3    NA    NA
4     2  2002
5    NA    NA
6     3  2003
7    NA    NA
von4xj4u

von4xj4u2#

下面是一个基R溶液:

data_new <- as.data.frame(lapply(data, as.character), stringsAsFactors = FALSE)
head(do.call(rbind, by(data_new, data$study, rbind, "")), -1)
study year
1.1     1 2001
1.2     1 2001
1.3           
2.3     2 2002
2.2           
3.4     3 2003
06odsfpq

06odsfpq3#

按等于study的新列分组,然后使用group_modify在每组末尾添加一行,最后删除study2和最后一行。

library(dplyr)

data %>%
 group_by(study2 = study) %>%
 group_modify(~ add_row(.)) %>%
 ungroup %>%
 select(-study2) %>%
 slice(-n())

给出:

# A tibble: 7 x 2
  study  year
  <dbl> <dbl>
1     1  2001
2     1  2001
3    NA    NA
4     2  2002
5    NA    NA
6     3  2003

已添加

在最近发布的dplyr 1.1.0中,这个时间可以稍微缩短:

data %>%
  mutate(study2 = study) %>%
  reframe(add_row(across()), .by = study2) %>%
  select(-study2) %>%
  slice(-n())

相关问题