R 通过创建新变量重塑形状
如何通过向下面的数据集添加另一个名为month的变量来转换数据R 通过创建新变量重塑形状,r,R,如何通过向下面的数据集添加另一个名为month的变量来转换数据 ID Com Lac Nov(PM) Nov(TM) Dec(PM) Dec(TM) 1 A E 12 11 28 29 2 B F 2 13 26 44 3 C G 7 15 18 37 4 D
ID Com Lac Nov(PM) Nov(TM) Dec(PM) Dec(TM)
1 A E 12 11 28 29
2 B F 2 13 26 44
3 C G 7 15 18 37
4 D H 4 10 22 22
上面是需要进行如下转换的数据帧
ID Com Lac Month PM TM
1 A E Nov 12 11
1 A E Dec 28 29
2 B F Nov 2 13
2 B F Dec 26 44
3 C G Nov 7 15
3 C G Dec 18 37
4 D H Nov 4 10
4 D H Dec 22 22
数据:
df1这里有一个带有tidyverse
的选项。我们以“长”格式收集列“11月(PM)到“12月(TM)
”,然后使用提取
,将“关键”列拆分为“月”和另一列,最后将其扩展为“宽”格式
df1 %>%
gather(key, val, `Nov(PM)`:`Dec(TM)`) %>%
extract(key, into = c('Month', 'key'), '^([^)]+)\\(([^)]+).*') %>%
spread(key, val)
# ID Com Lac Month PM TM
#1 1 A E Dec 28 29
#2 1 A E Nov 12 11
#3 2 B F Dec 26 44
#4 2 B F Nov 2 13
#5 3 C G Dec 18 37
#6 3 C G Nov 7 15
#7 4 D H Dec 22 22
#8 4 D H Nov 4 10
数据
df1所有函数中最邪恶、最被轻视的函数,restrape
处理得非常好。只要您将名称从“时间(变量)”
旋转到“变量时间”
,它将一次性处理所有内容:
names(df1) <- gsub("(.+?)\\((.+?)\\)", "\\2_\\1", names(df1))
reshape(df1, idvar=c("ID","Com","Lac"), varying=4:7,
direction="long", sep="_", timevar="Month")
# ID Com Lac Month PM TM
#1.A.E.Nov 1 A E Nov 12 11
#2.B.F.Nov 2 B F Nov 2 13
#3.C.G.Nov 3 C G Nov 7 15
#4.D.H.Nov 4 D H Nov 4 10
#1.A.E.Dec 1 A E Dec 28 29
#2.B.F.Dec 2 B F Dec 26 44
#3.C.G.Dec 3 C G Dec 18 37
#4.D.H.Dec 4 D H Dec 22 22
names(df1)能否使用dput()提供一个可重复的示例@akrun-我承认这有点棘手,但它也非常灵活!它在R用户中没有很多粉丝,所以我喜欢开玩笑地向它糟糕的声誉致敬。
df1 <- structure(list(ID = 1:4, Com = c("A", "B", "C", "D"), Lac = c("E",
"F", "G", "H"), `Nov(PM)` = c(12L, 2L, 7L, 4L), `Nov(TM)` = c(11L,
13L, 15L, 10L), `Dec(PM)` = c(28L, 26L, 18L, 22L), `Dec(TM)` = c(29L,
44L, 37L, 22L)), class = "data.frame", row.names = c(NA, -4L))
names(df1) <- gsub("(.+?)\\((.+?)\\)", "\\2_\\1", names(df1))
reshape(df1, idvar=c("ID","Com","Lac"), varying=4:7,
direction="long", sep="_", timevar="Month")
# ID Com Lac Month PM TM
#1.A.E.Nov 1 A E Nov 12 11
#2.B.F.Nov 2 B F Nov 2 13
#3.C.G.Nov 3 C G Nov 7 15
#4.D.H.Nov 4 D H Nov 4 10
#1.A.E.Dec 1 A E Dec 28 29
#2.B.F.Dec 2 B F Dec 26 44
#3.C.G.Dec 3 C G Dec 18 37
#4.D.H.Dec 4 D H Dec 22 22