如何将数据帧中的每两行“合并”为一个?

时间:2019-08-13 08:40:34

标签: r

我有一个40行的1列数据帧/小标题,如下所示:

Team1
Team2
Team3
Team4
Team5
Team6
Team7
Team8
Team9
Team10
...
Team40

我想最终得到这样的东西:

Team1 x Team2
Team3 x Team4
Team5 x Team6
Team7 x Team8 
...
Team19 x Team20

对不起,对于新手问题,但是我该如何在R中实现呢?

3 个答案:

答案 0 :(得分:2)

使用dplyr可以为合并(rep)创建索引,确保您的团队井井有条(arrange)。然后,您可以将团队与group_bysummarise

合并
 data <- data.frame(team_no = paste0("Team", 1:20)) %>% 
         arrange(team_no) %>% 
         mutate(index_to_merge = rep(1:(nrow(data)/2), each = 2)) %>% 
         group_by(index_to_merge) %>% 
         summarise(team_no_merged = paste(team_no, collapse = " x "))

输出:

data
# A tibble: 10 x 2
   index_to_merge team_no_merged 
            <int> <chr>          
 1              1 Team1 x Team2  
 2              2 Team3 x Team4  
 3              3 Team5 x Team6  
 4              4 Team7 x Team8  
 5              5 Team9 x Team10 
 6              6 Team11 x Team12
 7              7 Team13 x Team14
 8              8 Team15 x Team16
 9              9 Team17 x Team18
10             10 Team19 x Team20

答案 1 :(得分:1)

df <- data.frame(team = paste0("Team", 1:40))

first <- seq(1, nrow(df), 2)
second <- seq(2, nrow(df), 2)

sapply(1:length(first), function(x) paste(df[first[x],1], "x", df[second[x],1]))

# [1] "Team1 x Team2"   "Team3 x Team4"   "Team5 x Team6"   "Team7 x Team8"   "Team9 x Team10"  "Team11 x Team12" "Team13 x Team14" "Team15 x Team16"
# [9] "Team17 x Team18" "Team19 x Team20" "Team21 x Team22" "Team23 x Team24" "Team25 x Team26" "Team27 x Team28" "Team29 x Team30" "Team31 x Team32"
# [17] "Team33 x Team34" "Team35 x Team36" "Team37 x Team38" "Team39 x Team40"

答案 2 :(得分:0)

我们可以split的每个备用值并将pasteReduce一起使用

Reduce(function(x, y) paste(x, y, sep = " X "), split(df$team, c(TRUE, FALSE)[2:1]))

#[1] "Team1 X Team2"   "Team3 X Team4"   "Team5 X Team6"   "Team7 X Team8"   "Team9 X Team10"  "Team11 X Team12"
#[7] "Team13 X Team14" "Team15 X Team16" "Team17 X Team18" "Team19 X Team20" "Team21 X Team22" "Team23 X Team24"
#[13] "Team25 X Team26" "Team27 X Team28" "Team29 X Team30" "Team31 X Team32" "Team33 X Team34" "Team35 X Team36"
#[19] "Team37 X Team38" "Team39 X Team40"