R语言 连接两个长度不相同的数据块,并为空单元格添加“NA”

w8f9ii69  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(78)

我在论坛上发了几个帖子,但都没有成功。
如果我希望我是清楚的。如果不是,请告诉我我有两个名为traitement_RPE和traitement_VOL的tiblbles,其中包含3列名为“运动员”,“类型”和“价值”。

第一张图片表示traitement_VOL和第二张图片表示traitement_RPE。我想通过“Athletes”键加入它们。问题是traitement_RPE中的一些运动员不存在于traitement_VOL中。在这种情况下,我想要“NA”单元格:

在这个例子中,Balfet在traitement_VOL中有值,但在traitement_RPE中没有。所以当名称在tibble之间不匹配时,我想要NA单元格或“0”单元格,这无关紧要。
我尝试了left_join()full_join()等.没有成功看到这张图片:

有:“Detected an unexpected many-to-many relationship between x and y.”(检测到xy之间存在意外的多对多关系)。它为每个Type.y参数复制Type.x列。我只想让1个参数乘以1,如我的第三张图片所示。
我得到的最好的结果是merge(),但我得到的是行连接而不是列连接,而且向traitement_RPE的“Valeur”中没有值的运动员添加行是很复杂的,因为这是偶然的(运动员的调查,有时他们不回答.)。
如果有人能帮我解决这个问题,谢谢!
下面是完整的代码:)对不起,有些部分是法语,但代码是一种通用语言:)

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
library(tidyverse)
# install.packages("xlsx")
# library(xlsx)
library(data.table)

library(readxl)
RPE_CDN_2324 <- read_excel("Suivi RPE 2223.xlsx",
                             na = "Non réalisé")

VOLUME_RCN_2324 <- read_excel("CDE_RCN_2324.xlsx", 
                           sheet = "Vol_test", skip = 1)

traitement_RPE <- tibble(RPE_CDN_2324)

traitement_VOL <- tibble(VOLUME_RCN_2324)

## CODE SUR VOLUME_RCN_2324 ----

#PIVOT LONGER DES COLONNES DE RPE_CDN_2324

traitement_VOL <- traitement_VOL |> 
  pivot_longer(cols = starts_with("J2"), names_to = "VOL", values_to = "temps")

# SUPPRESSION DES NA DE RPE_CDN_2324

traitement_VOL <- traitement_VOL |> 
  filter(!is.na(temps))

# TRI DU TIBBLE PAR ORDRE ALPHABETIQUE DE RPE_CDN_2324

traitement_VOL <- traitement_VOL |>
  rename(Athletes = "...1") |> 
  rename(Type = "VOL") |> 
  rename(Valeur = "temps") |>
  arrange(Athletes)

#RECOMPOSITION DU TIBBLE DE RPE_CDN_2324

traitement_VOL <- traitement_VOL |>
  select(Athletes, Type, Valeur) |> 
  filter(Valeur > 0.1)

### CODE SUR RPE_CDN_2324 ----

#PIVOT LONGER DES COLONNES DE RPE_CDN_2324

traitement_RPE <- traitement_RPE |> 
  pivot_longer(cols = starts_with("RPE"), names_to = "RPE", values_to = "valeur")

# SUPPRESSION DES NA DE RPE_CDN_2324

traitement_RPE <- traitement_RPE |> 
  filter(!is.na(valeur)) 

# TRI DU TIBBLE PAR ORDRE ALPHABETIQUE DE RPE_CDN_2324

traitement_RPE <- traitement_RPE |> 
  rename(Athletes = "Votre nom de famille") |> 
  rename(Type = "RPE") |> 
  rename(Valeur = "valeur") |> 
  arrange(Athletes)

#RECOMPOSITION DU TIBBLE DE RPE_CDN_2324

traitement_RPE <- traitement_RPE |>
  select(Athletes ,Type , Valeur)

#### TRYING TO JOIN TIBBLES  ----

# Bilann <- left_join(traitement_VOL, traitement_RPE, by = "Athletes")

# rename and set NAs to 0
# names(Bilann) <- c("Athletes", "Valeur", "Valeur")
# Bilann[is.na(Bilann)] <- 0

# BILAN <- merge(traitement_VOL, traitement_RPE, by = c("Athletes"))

# write.xlsx(x = traitement_RPE, file = "Traitemennt_RPE-testRCN.xls")

字符串

cngwdvgl

cngwdvgl1#

你不会从你的示例dfs返回你的示例结果,因为数据是不同的。例如,“COLLECTIF”和“TERRAIN”对两个表来说不是通用的。但是这里有一个解决方案,假设你想用通用的属性连接数据,例如“RPE [ACTIVATION].21”和“J2 [ACTIVATION]"是一样的。

library(dplyr)
library(stringr)

# Sample dat based on your example images
set.seed(1)
traitement_VOL <- data.frame(Athletes = c(rep(LETTERS[1:4], each = 4), LETTERS[4]),
                             type = c(rep(c("J2 Vol [ACTIVATION]",
                                            "J2 Vol [SEPARE]",
                                            "J2 Vol [TERRAIN]",
                                            "J2 Vol [MUSCU]...17"), 4),
                                      "J2 Vol [DEV INDIV]"),
                             valeur = c(rep(c(15, 54, 67, 35), 4), 25))

traitement_RPE <- data.frame(Athletes = c(rep(LETTERS[1:4], each = 4), LETTERS[4]),
                             type = c(rep(c("RPE [MUSCU]...14",
                                            "RPE [COLLECTIF]...20",
                                            "RPE [ACTIVATION]...21",
                                            "RPE [SEPARE]...22"), 4), 
                                      "RPE[DEV INDIV]...24"),
                             valeur = sample(4:8, 17, replace =  TRUE))

# Add new 'common' field to each df 
traitement_VOL <- traitement_VOL %>%
  mutate(x = str_extract(type, pattern = "(?<=\\[).*(?=\\])"))

traitement_RPE <- traitement_RPE %>%
  mutate(x = str_extract(type, pattern = "(?<=\\[).*(?=\\])"))

# Join dfs using two columns
traitement_VOL %>%
  left_join(traitement_RPE, by = join_by(Athletes, x))

   Athletes              type.x valeur.x          x                type.y valeur.y
1         A J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        4
2         A     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        5
3         A    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
4         A J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        4
5         B J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        5
6         B     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        6
7         B    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
8         B J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        8
9         C J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        8
10        C     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        8
11        C    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
12        C J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        6
13        D J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        4
14        D     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        8
15        D    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
16        D J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        5
17        D  J2 Vol [DEV INDIV]       25  DEV INDIV   RPE[DEV INDIV]...24        8

traitement_VOL %>%
  full_join(traitement_RPE, by = join_by(Athletes, x))

   Athletes              type.x valeur.x          x                type.y valeur.y
1         A J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        4
2         A     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        5
3         A    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
4         A J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        4
5         B J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        5
6         B     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        6
7         B    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
8         B J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        8
9         C J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        8
10        C     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        8
11        C    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
12        C J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        6
13        D J2 Vol [ACTIVATION]       15 ACTIVATION RPE [ACTIVATION]...21        4
14        D     J2 Vol [SEPARE]       54     SEPARE     RPE [SEPARE]...22        8
15        D    J2 Vol [TERRAIN]       67    TERRAIN                  <NA>       NA
16        D J2 Vol [MUSCU]...17       35      MUSCU      RPE [MUSCU]...14        5
17        D  J2 Vol [DEV INDIV]       25  DEV INDIV   RPE[DEV INDIV]...24        8
18        A                <NA>       NA  COLLECTIF  RPE [COLLECTIF]...20        7
19        B                <NA>       NA  COLLECTIF  RPE [COLLECTIF]...20        6
20        C                <NA>       NA  COLLECTIF  RPE [COLLECTIF]...20        4
21        D                <NA>       NA  COLLECTIF  RPE [COLLECTIF]...20        5

字符串

相关问题