我在处理以下数据(df)时遇到了问题
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循环不会这样做。
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一起工作,但我做不到。
发布于 2018-03-04 00:01:44
像这样使用ave:
transform(DF, new = ave(No, Team, FUN = function(x) paste(x, collapse = "-")))给予:
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:
library(dplyr)
DF %>%
group_by(Team) %>%
mutate(new = paste(No, collapse = "-")) %>%
ungroup备注
可重现形式的输入DF为:
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"))发布于 2018-03-04 00:03:29
我们可以aggregate,然后merge到原始的data.frame并排序:
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-10https://stackoverflow.com/questions/49086068
复制相似问题