R 整理数据集

R 整理数据集,r,tidyverse,R,Tidyverse,一直在努力整理数据集。简要说明:每一行代表一个人,然后列重复“日期”、“分数A”、“分数B”等,用于我们有分数的所有日期。希望将所有日期都放在一列中,相应的分数在相邻的列中。已经尝试了多种简单pivot_更长或pivot_更宽的组合,但迄今为止没有成功。示例文件位于 谢谢你的帮助 我们可以在做了一些name\u修复后使用pivot\u更长的时间 library(tidyr) library(dplyr) nm1 <- sub("\\.?\\d+$", "", names(df1)[-1

一直在努力整理数据集。简要说明:每一行代表一个人,然后列重复“日期”、“分数A”、“分数B”等,用于我们有分数的所有日期。希望将所有日期都放在一列中,相应的分数在相邻的列中。已经尝试了多种简单pivot_更长或pivot_更宽的组合,但迄今为止没有成功。示例文件位于


谢谢你的帮助

我们可以在做了一些
name\u修复后使用
pivot\u更长的时间

library(tidyr)
library(dplyr)

nm1 <- sub("\\.?\\d+$", "", names(df1)[-1])
names(df1)[-1] <- paste0(nm1, "_", ave(nm1, nm1, FUN = seq_along))
df1 %>%
    select(-c("X_1", "X_2")) %>% 
    pivot_longer(cols = -ID, names_to = c(".value", "group"), 
            names_sep="_", values_drop_na = TRUE ) %>% 
    na.omit
# A tibble: 5 x 6
#     ID group Date   ScoreA ScoreB ScoreC
#  <int> <chr> <fct>   <dbl>  <dbl>  <dbl>
#1   123 1     1/1/11    1      2      3  
#2   123 2     1/2/11    4      5      6  
#3   123 3     1/4/11    6.1    6.2    6.3
#4   345 1     2/2/22    7      8      9  
#5   345 2     2/3/22   10     11     12  

或使用
数据中的
melt
。表格

library(data.table)
na.omit(melt(setDT(df1), measure = patterns("^Date", "ScoreA", 
   "ScoreB", "ScoreC", "^X"),
    value.name = c("Date", "ScoreA", "ScoreB", "ScoreC", "X"))[, X := NULL])
#    ID variable   Date ScoreA ScoreB ScoreC
#1: 123        1 1/1/11    1.0    2.0    3.0
#2: 345        1 2/2/22    7.0    8.0    9.0
#3: 123        2 1/2/11    4.0    5.0    6.0
#4: 345        2 2/3/22   10.0   11.0   12.0
#5: 123        3 1/4/11    6.1    6.2    6.3
数据
df1完美。谢谢你的帮助!
library(data.table)
na.omit(melt(setDT(df1), measure = patterns("^Date", "ScoreA", 
   "ScoreB", "ScoreC", "^X"),
    value.name = c("Date", "ScoreA", "ScoreB", "ScoreC", "X"))[, X := NULL])
#    ID variable   Date ScoreA ScoreB ScoreC
#1: 123        1 1/1/11    1.0    2.0    3.0
#2: 345        1 2/2/22    7.0    8.0    9.0
#3: 123        2 1/2/11    4.0    5.0    6.0
#4: 345        2 2/3/22   10.0   11.0   12.0
#5: 123        3 1/4/11    6.1    6.2    6.3
df1 <- read.csv("https://raw.githubusercontent.com/tueland/R_help/master/R%20help.csv")