在 R 中的数据框中的列的每个唯一值之后添加一个空白行
Posted
技术标签:
【中文标题】在 R 中的数据框中的列的每个唯一值之后添加一个空白行【英文标题】:Add a blank row after each unique value of a column in a dataframe in R 【发布时间】:2022-01-13 17:42:28 【问题描述】:我想知道是否可以在下面我的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"
【问题讨论】:
见这里:***.com/questions/62007509/…> 【参考方案1】:按等于 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
【讨论】:
【参考方案2】:这是一个基本的 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
【讨论】:
head(do.call(rbind, by(data, data$study, rbind, "")), -1)
似乎没有第一行就足够了。
感谢您的建议!【参考方案3】:
您可以使用group_split
将数据按组拆分为数据框列表。然后在每个列表元素上映射一个函数,并使用map_dfr
将它们的输出堆叠回一个数据框。
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
【讨论】:
超级有趣!只是好奇,如果我们想要添加两个 NA 行而不是一个 NA 行,应该改变什么? 然后我将用map_dfr(~ .x[1:(nrow(.x) + 2),])
替换最后一行。然后你也不需要加载tibble
包。
非常感谢。有趣!以上是关于在 R 中的数据框中的列的每个唯一值之后添加一个空白行的主要内容,如果未能解决你的问题,请参考以下文章
在计算 Pandas 创建的数据框中的列的平均值时指定“跳过 NA”
Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回