一个从长到宽的问题或其他问题
A long to wide question or something else
一个关于从长到宽的快速问题。我有一个数据
structure(list(Var.name = c("UPKTMPT", "UPKLDT", "UPKLTM", "UPKSHPYN",
"UPKND", "UPKNDSP", "UPKSTDT", "UPKVOL", "UPKSHPDT", "UPKLYN",
"UPKSPTM", "UPKSTTM", "UPKSPDT", "UPKLSTYN", "EXCCYN", "EXYN",
"EXDT", "EXSTTM", "EXSPTM", "EXREAS", "EXRSAE2", "EXRSOTH", "EXDSLVL",
"EXLOTNO", "EXVOLA", "EXDOSA", "EXHELD", "EXHELDSP"), EDCT = c("T568",
"T568", "T568", "T568", "T568", "T568", "T568", "T568", "T568",
"T568", "T568", "T568", "T568", "T568", "T492", "T492", "T492",
"T492", "T492", "T492", "T492", "T492", "T492", "T492", "T492",
"T492", "T492", "T492")), row.names = c(NA, 28L), class = "data.frame")
如何将列名作为 EDCT 中的每个值。看起来像这样:
我很困惑。如果我需要使用 reshape 使其变长变宽,它需要 idvar amd timvar,而我没有。我应该怎么办?这是一个从长到宽的问题吗?
您在找这样的东西吗?
df %>%
tidyr::pivot_wider(names_from = EDCT, values_from = Var.name) %>%
tidyr::unnest(cols = everything())
#> # A tibble: 14 x 2
#> T568 T492
#> <chr> <chr>
#> 1 UPKTMPT EXCCYN
#> 2 UPKLDT EXYN
#> 3 UPKLTM EXDT
#> 4 UPKSHPYN EXSTTM
#> 5 UPKND EXSPTM
#> 6 UPKNDSP EXREAS
#> 7 UPKSTDT EXRSAE2
#> 8 UPKVOL EXRSOTH
#> 9 UPKSHPDT EXDSLVL
#> 10 UPKLYN EXLOTNO
#> 11 UPKSPTM EXVOLA
#> 12 UPKSTTM EXDOSA
#> 13 UPKSPDT EXHELD
#> 14 UPKLSTYN EXHELDSP
或者,作为基数 R 中的 one-liner,
as.data.frame(lapply(split(df, df$EDCT), function(x) x$Var.name))
#> T492 T568
#> 1 EXCCYN UPKTMPT
#> 2 EXYN UPKLDT
#> 3 EXDT UPKLTM
#> 4 EXSTTM UPKSHPYN
#> 5 EXSPTM UPKND
#> 6 EXREAS UPKNDSP
#> 7 EXRSAE2 UPKSTDT
#> 8 EXRSOTH UPKVOL
#> 9 EXDSLVL UPKSHPDT
#> 10 EXLOTNO UPKLYN
#> 11 EXVOLA UPKSPTM
#> 12 EXDOSA UPKSTTM
#> 13 EXHELD UPKSPDT
#> 14 EXHELDSP UPKLSTYN
使用基数 R:
newdf = character()
for(i in unique(df$EDCT)){
newdf = cbind(newdf, df$Var.name[df$EDCT==i])
}
在base R
中,我们可以使用unstack
unstack(df1, Var.name ~ EDCT)
-输出
# T492 T568
#1 EXCCYN UPKTMPT
#2 EXYN UPKLDT
#3 EXDT UPKLTM
#4 EXSTTM UPKSHPYN
#5 EXSPTM UPKND
#6 EXREAS UPKNDSP
#7 EXRSAE2 UPKSTDT
#8 EXRSOTH UPKVOL
#9 EXDSLVL UPKSHPDT
#10 EXLOTNO UPKLYN
#11 EXVOLA UPKSPTM
#12 EXDOSA UPKSTTM
#13 EXHELD UPKSPDT
#14 EXHELDSP UPKLSTYN
一个关于从长到宽的快速问题。我有一个数据
structure(list(Var.name = c("UPKTMPT", "UPKLDT", "UPKLTM", "UPKSHPYN",
"UPKND", "UPKNDSP", "UPKSTDT", "UPKVOL", "UPKSHPDT", "UPKLYN",
"UPKSPTM", "UPKSTTM", "UPKSPDT", "UPKLSTYN", "EXCCYN", "EXYN",
"EXDT", "EXSTTM", "EXSPTM", "EXREAS", "EXRSAE2", "EXRSOTH", "EXDSLVL",
"EXLOTNO", "EXVOLA", "EXDOSA", "EXHELD", "EXHELDSP"), EDCT = c("T568",
"T568", "T568", "T568", "T568", "T568", "T568", "T568", "T568",
"T568", "T568", "T568", "T568", "T568", "T492", "T492", "T492",
"T492", "T492", "T492", "T492", "T492", "T492", "T492", "T492",
"T492", "T492", "T492")), row.names = c(NA, 28L), class = "data.frame")
如何将列名作为 EDCT 中的每个值。看起来像这样:
我很困惑。如果我需要使用 reshape 使其变长变宽,它需要 idvar amd timvar,而我没有。我应该怎么办?这是一个从长到宽的问题吗?
您在找这样的东西吗?
df %>%
tidyr::pivot_wider(names_from = EDCT, values_from = Var.name) %>%
tidyr::unnest(cols = everything())
#> # A tibble: 14 x 2
#> T568 T492
#> <chr> <chr>
#> 1 UPKTMPT EXCCYN
#> 2 UPKLDT EXYN
#> 3 UPKLTM EXDT
#> 4 UPKSHPYN EXSTTM
#> 5 UPKND EXSPTM
#> 6 UPKNDSP EXREAS
#> 7 UPKSTDT EXRSAE2
#> 8 UPKVOL EXRSOTH
#> 9 UPKSHPDT EXDSLVL
#> 10 UPKLYN EXLOTNO
#> 11 UPKSPTM EXVOLA
#> 12 UPKSTTM EXDOSA
#> 13 UPKSPDT EXHELD
#> 14 UPKLSTYN EXHELDSP
或者,作为基数 R 中的 one-liner,
as.data.frame(lapply(split(df, df$EDCT), function(x) x$Var.name))
#> T492 T568
#> 1 EXCCYN UPKTMPT
#> 2 EXYN UPKLDT
#> 3 EXDT UPKLTM
#> 4 EXSTTM UPKSHPYN
#> 5 EXSPTM UPKND
#> 6 EXREAS UPKNDSP
#> 7 EXRSAE2 UPKSTDT
#> 8 EXRSOTH UPKVOL
#> 9 EXDSLVL UPKSHPDT
#> 10 EXLOTNO UPKLYN
#> 11 EXVOLA UPKSPTM
#> 12 EXDOSA UPKSTTM
#> 13 EXHELD UPKSPDT
#> 14 EXHELDSP UPKLSTYN
使用基数 R:
newdf = character()
for(i in unique(df$EDCT)){
newdf = cbind(newdf, df$Var.name[df$EDCT==i])
}
在base R
中,我们可以使用unstack
unstack(df1, Var.name ~ EDCT)
-输出
# T492 T568
#1 EXCCYN UPKTMPT
#2 EXYN UPKLDT
#3 EXDT UPKLTM
#4 EXSTTM UPKSHPYN
#5 EXSPTM UPKND
#6 EXREAS UPKNDSP
#7 EXRSAE2 UPKSTDT
#8 EXRSOTH UPKVOL
#9 EXDSLVL UPKSHPDT
#10 EXLOTNO UPKLYN
#11 EXVOLA UPKSPTM
#12 EXDOSA UPKSTTM
#13 EXHELD UPKSPDT
#14 EXHELDSP UPKLSTYN