首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加对数据进行分组的新列

添加对数据进行分组的新列
EN

Stack Overflow用户
提问于 2018-03-03 23:54:48
回答 2查看 55关注 0票数 0

我在处理以下数据(df)时遇到了问题

代码语言:javascript
复制
1                                                  TeamA     1
2                                                  TeamB     2
3                                                  TeamC     3
4                                                  TeamA     4
5                                                  TeamB     5
6                                                  TeamC     6
7                                                  TeamA     7
8                                                  TeamB     8
9                                                  TeamD     9
10                                                 TeamD    10

我想添加一个粘贴团队结果的列,因此它看起来像这样。所以新的列看起来像这样。因为我的数据不小,所以for循环不会这样做。

代码语言:javascript
复制
1                                                  TeamA     1     1-4-7 
2                                                  TeamB     2     2-5-8
3                                                  TeamC     3     3-6
4                                                  TeamA     4     1-4-7  
5                                                  TeamB     5     2-5-8
6                                                  TeamC     6     3-6
7                                                  TeamA     7     1-4-7 
8                                                  TeamB     8     2-5-8
9                                                  TeamD     9     9-10
10                                                 TeamD    10     9-10 

在原始数据中,没有我可以使用的团队模式。我认为它必须与dplyr的group_by一起工作,但我做不到。

EN

回答 2

Stack Overflow用户

发布于 2018-03-04 00:01:44

像这样使用ave

代码语言:javascript
复制
transform(DF, new = ave(No, Team, FUN = function(x) paste(x, collapse = "-")))

给予:

代码语言:javascript
复制
    Team No   new
1  TeamA  1 1-4-7
2  TeamB  2 2-5-8
3  TeamC  3   3-6
4  TeamA  4 1-4-7
5  TeamB  5 2-5-8
6  TeamC  6   3-6
7  TeamA  7 1-4-7
8  TeamB  8 2-5-8
9  TeamD  9  9-10
10 TeamD 10  9-10

或者使用dplyr:

代码语言:javascript
复制
library(dplyr)

DF %>% 
   group_by(Team) %>% 
   mutate(new = paste(No, collapse = "-")) %>% 
   ungroup

备注

可重现形式的输入DF为:

代码语言:javascript
复制
Lines <- "
TeamA     1
TeamB     2
TeamC     3
TeamA     4
TeamB     5
TeamC     6
TeamA     7
TeamB     8
TeamD     9
TeamD    10"
DF <- read.table(text = Lines, as.is = TRUE, col.names = c("Team", "No"))
票数 3
EN

Stack Overflow用户

发布于 2018-03-04 00:03:29

我们可以aggregate,然后merge到原始的data.frame并排序:

代码语言:javascript
复制
df <- read.table(text="1                                                  TeamA     1
                 2                                                  TeamB     2
                 3                                                  TeamC     3
                 4                                                  TeamA     4
                 5                                                  TeamB     5
                 6                                                  TeamC     6
                 7                                                  TeamA     7
                 8                                                  TeamB     8
                 9                                                  TeamD     9
                 10                                                 TeamD    10",h=F,strin=F)

aggregated_scores <- aggregate(V3 ~ V2,df,paste,collapse='-')    
new_df <- merge(df[-3],aggregated_scores)
new_df <- new_df[order(new_df$V1),]

#       V2 V1    V3
# 1  TeamA  1 1-4-7
# 4  TeamB  2 2-5-8
# 8  TeamC  3   3-6
# 3  TeamA  4 1-4-7
# 5  TeamB  5 2-5-8
# 7  TeamC  6   3-6
# 2  TeamA  7 1-4-7
# 6  TeamB  8 2-5-8
# 9  TeamD  9  9-10
# 10 TeamD 10  9-10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49086068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档