簡體   English   中英

在 R 中的 dataframe 中的列的每個唯一值之后添加一個空白行

[英]Add a blank row after each unique value of a column in a dataframe in R

我想知道是否可以在下面的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"

您可以使用group_split按組將數據拆分為數據框列表。 然后在每個列表元素上 map 一個 function 並使用map_dfr將它們的 output 堆疊回數據幀中。

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

data %>% 
  group_split(study) %>% 
  map_dfr(~ add_row(.x, .after = Inf))

Output

  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

這是一個基本的 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

使用 tibble 你可以使用add_row

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

library(tibble)


data |> 
  add_row(study = NA, year = NA, .before = 3)|>
  add_row(study = NA, year = NA, .after = 4)
#>   study year
#> 1     1 2001
#> 2     1 2001
#> 3    NA   NA
#> 4     2 2002
#> 5    NA   NA
#> 6     3 2003

代表 package (v2.0.1) 於 2021 年 12 月 8 日創建

按等於 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM