R 从长格式到宽格式,其中新生成的列灵活地反映值的出现顺序
我试图将我的数据集从长格式重新格式化为宽格式,但尽管这是讨论最多的主题之一,但我无法为我的案例找到解决方案,也无法从其他人使用的方法中概括 我的数据是长格式的,其中每个ID的行数不同(相对于其他ID)。我想转换为宽格式,其中每个ID有一行,数据由带有后缀的列表示,后缀反映每个ID中每个值的显示顺序 举例说明: 请注意,NAs值不一定对应于这两种格式。在长格式中,NAs只是缺少数据;但在宽幅格式中,NAs出现在该id的值小于其他id可能具有的变量x的值的数量的地方 我的数据 在现实生活中,我的数据有不止一个变量,可能有两个版本: Version 1::对于每个ID,值显示在变量的同一行中R 从长格式到宽格式,其中新生成的列灵活地反映值的出现顺序,r,dataframe,reshape,R,Dataframe,Reshape,我试图将我的数据集从长格式重新格式化为宽格式,但尽管这是讨论最多的主题之一,但我无法为我的案例找到解决方案,也无法从其他人使用的方法中概括 我的数据是长格式的,其中每个ID的行数不同(相对于其他ID)。我想转换为宽格式,其中每个ID有一行,数据由带有后缀的列表示,后缀反映每个ID中每个值的显示顺序 举例说明: 请注意,NAs值不一定对应于这两种格式。在长格式中,NAs只是缺少数据;但在宽幅格式中,NAs出现在该id的值小于其他id可能具有的变量x的值的数量的地方 我的数据 在现实生活中,我的数
##可复制数据
种子集(125)
根据\u id运行\u以下是基于@a.Suliman注释的解决方案
library(tidyr)
library(dplyr)
d %>%
# Combine all values besides id in one column
gather(key, value, -id) %>%
# Filter rows without a value
filter(!is.na(value)) %>%
group_by(id, key) %>%
# Create a new key variable numbering the key for each id
mutate(key_new = paste0(key, seq_len(n()))) %>%
ungroup() %>%
select(-key) %>%
# Spread the data with the new key
spread(key_new, value)
# A tibble: 4 x 13
# id x1 x2 x3 x4 y1 y2 y3 y4 z1 z2 z3 z4
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 38 17 32 75 63 27 81 2 61 76 89 53
# 2 2 40 28 71 NA 75 47 67 NA 4 70 33 NA
# 3 3 95 41 97 NA 26 7 8 NA 82 99 68 NA
# 4 4 93 NA NA NA 38 NA NA NA 58 NA NA NA
tidyr::聚集
,使用x、y和z NAs筛选行,变异然后扩散。再见,谢谢。我错过了mutate(key\u new=paste0(key,seq\u len(n()))
的关键部分,相反,我希望一些看不见的魔法会知道在没有特别要求的情况下自动进行编号。
# A tibble: 4 x 13
# id x1 x2 x3 x4 y1 y2 y3 y4 z1 z2 z3 z4
# <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
# 1 1 18 85 55 58 28 93 59 15 5 22 67 77
# 2 2 88 13 32 40 7 14 80 74 91 71 69 NA
# 3 3 96 73 52 NA 66 NA NA NA 76 NA NA NA
# 4 4 56 53 39 NA 12 42 99 37 16 84 NA NA