gpt4 book ai didi

r - 按组逐列串联

转载 作者:行者123 更新时间:2023-12-04 09:58:39 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Cumulatively paste (concatenate) values grouped by another variable

(6 个回答)


5年前关闭。




假设我有这个输入:

             ID     date_1      date_2     str
1 1 2010-07-04 2008-01-20 A
2 2 2015-07-01 2011-08-31 C
3 3 2015-03-06 2013-01-18 D
4 4 2013-01-10 2011-08-30 D
5 5 2014-06-04 2011-09-18 B
6 5 2014-06-04 2011-09-18 B
7 6 2012-11-22 2011-09-28 C
8 7 2014-06-17 2013-08-04 A
10 7 2014-06-17 2013-08-04 B
11 7 2014-06-17 2013-08-04 B

我想逐步连接 str 的值列由组变量 ID ,如以下输出所示:
             ID     date_1      date_2     str
1 1 2010-07-04 2008-01-20 A
2 2 2015-07-01 2011-08-31 C
3 3 2015-03-06 2013-01-18 D
4 4 2013-01-10 2011-08-30 D
5 5 2014-06-04 2011-09-18 B
6 5 2014-06-04 2011-09-18 B,B
7 6 2012-11-22 2011-09-28 C
8 7 2014-06-17 2013-08-04 A
10 7 2014-06-17 2013-08-04 A,B
11 7 2014-06-17 2013-08-04 A,B,B

我尝试使用 ave()使用此代码的功能:
within(table, {
Emp_list <- ave(str, ID, FUN = function(x) paste(x, collapse = ","))
})

但它给出了以下输出,这不是我想要的:
         ID      date_1     date_2      str
1 1 2010-07-04 2008-01-20 A
2 2 2015-07-01 2011-08-31 C
3 3 2015-03-06 2013-01-18 D
4 4 2013-01-10 2011-08-30 D
5 5 2014-06-04 2011-09-18 B,B
6 5 2014-06-04 2011-09-18 B,B
7 6 2012-11-22 2011-09-28 C
8 7 2014-06-17 2013-08-04 A,B,B
10 7 2014-06-17 2013-08-04 A,B,B
11 7 2014-06-17 2013-08-04 A,B,B

当然我想避免循环,因为我在一个大型数据库上工作。

最佳答案

怎么样ave()Reduce() . Reduce()函数允许我们在计算结果时累积结果。所以如果我们用 paste() 运行它我们可以累积粘贴的字符串。

f <- function(x) {
Reduce(function(...) paste(..., sep = ", "), x, accumulate = TRUE)
}

df$str <- with(df, ave(as.character(str), ID, FUN = f)

这给出了更新的数据框 df
   ID     date_1     date_2     str
1 1 2010-07-04 2008-01-20 A
2 2 2015-07-01 2011-08-31 C
3 3 2015-03-06 2013-01-18 D
4 4 2013-01-10 2011-08-30 D
5 5 2014-06-04 2011-09-18 B
6 5 2014-06-04 2011-09-18 B, B
7 6 2012-11-22 2011-09-28 C
8 7 2014-06-17 2013-08-04 A
10 7 2014-06-17 2013-08-04 A, B
11 7 2014-06-17 2013-08-04 A, B, B

注: function(...) paste(..., sep = ", ")也可以是 function(x, y) paste(x, y, sep = ", ") . (感谢皮埃尔·拉福图恩)

关于r - 按组逐列串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778422/

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