r - 按条件将行值组合成字符向量

标签 r dataframe

我有一个 data.frame,其中值在 col1 中重复。

col1 <- c("A", "A", "B", "B", "C")
col2 <- c(1995, 1997, 1999, 2000, 2005)

df <- data.frame(col1, col2)

我想将 col2 中对应于 col1 中相同字母的值组合到一个单元格中,以便 col2 显示一系列col1 中特定字母的值。为此,我将 data.frame 按 col1 拆分,应用 fun,然后将拆分后的 data.frames 重新绑定(bind)在一起。

library(tidyverse)

split_df <- split(df, df$col1)

fun <- function(df) {
  
  if (length(unique(df$col2)) > 1) {
    
    df$col2 <- paste(min(df$col2),
                     max(df$col2),
                     sep = "-")
    
    df <- distinct(df)
    
  }
  
  return(df)
}

split_df <- lapply(split_df, fun)

df <- do.call(rbind, split_df)

这可行,但我想知道是否有更直观或更有效的解决方案?

最佳答案

使用 aggregate 的 Base R 方式 -

aggregate(col2~col1, df, function(x)  paste0(unique(range(x)), collapse = '-'))

#  col1      col2
#1    A 1995-1997
#2    B 1999-2000
#3    C      2005

同样也可以用dplyr来写-

library(dplyr)

df %>% 
  group_by(col1) %>%
  summarise(col2 = paste0(unique(range(col2)), collapse = '-'))

关于r - 按条件将行值组合成字符向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71097343/

相关文章:

r - 查找列的相关性

R Shiny : read data file, 让用户选择变量,用 ggplot 作图

r - 如何在r中组合具有相同结构的两个列表

r - 将参数发送到子 Knitr 文件

r - 从 matlab 在 R 中绘制数据

返回包含数据框中所有变量的最大值的列

r - 在行中找到最高值的列表并获取它们的列名

r - 将我的 excel 文件中的日期与系统日期进行比较

python-3.x - 如何重新采样多索引数据帧内的数据

python - 如何从具有指示重叠的重复值的数据中计算现象的共现