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