gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:58:45 25 4
gpt4 key购买 nike

我有一个 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/

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