假设我有以下简短示例。我的目标是按列data.frame
重新排列"n"
,以便输出如下所示。由于我还是初学者,我不知道该怎么做。我尝试了reshape2
。
Method n lambda df
10.fold.CV Lasso 30 1.3102653 21.199
10.fold.CV.1SE 30 3.3734592 17.379
10.fold.CV Lasso 50 0.8956816 28.713
10.fold.CV.1SE 50 2.3527001 25.540
BIC 50 1.9833844 24.757
Modified.BIC 50 0.2091384 31.714
10.fold.CV Lasso 100 0.6467475 33.591
10.fold.CV.1SE 100 2.4961030 32.092
预期输出应如下所示:
Lambda30 df30 Lambda50 df50 Lambda100 df100
10.fold.CV Lasso 1.3102653 21.199 0.8956816 28.713 0.6467475 33.591
10.fold.CV.1SE 2.3527001 25.540 3.3734592 17.379 2.4961030 32.092
BIC 1.9833844 24.757 ..
Modified.BIC 0.2091384 31.714 ..
答案 0 :(得分:3)
您可以执行以下操作
library(tidyverse);
df %>%
gather(k, v, -Method, -n) %>%
unite(tmp, k, n, sep = "_") %>%
spread(tmp, v)
# Method df_100 df_30 df_50 lambda_100 lambda_30 lambda_50
#1 10.fold.CV Lasso 33.591 21.199 28.713 0.6467475 1.310265 0.8956816
#2 10.fold.CV.1SE 32.092 17.379 25.540 2.4961030 3.373459 2.3527001
#3 BIC NA NA 24.757 NA NA 1.9833844
#4 Modified.BIC NA NA 31.714 NA NA 0.2091384
说明:在tidyverse
中,使用tidyr::gather
,tidyr::unite
列从宽到长重新整形,并使用{{1从长到长重新整形,这是一个相当简单的问题}}
如有必要,请重新排序列,例如tidyr::spread
。
select