我有一個名為“結果”的資料框,看起來像這樣
我的資料框:
result <- structure(list(D = c(2986.286, 2842.54, 2921), E = c(3020.458,
2943.926, 2860.763), F = c(3008.644, 3142.134, 3002.515), G = c(2782.983,
3135.148, 2873.025), H = c(2874.082, 3066.655, 2778.107), I = c(2592.377,
3017.99, 2859.603), J = c(3051.184, 3011.467, 3007.769)), class = "data.frame", row.names = c("Above average",
"Below average", "very Good"))
我嘗試了以下方法:
result_long <- pivot_longer(result, 1:7, names_to="combination", values_to ="price.m" )
但是像這樣我失去了我的“指數”:“高于平均水平”,......,“非常好”因為我的結果是:
# A tibble: 21 x 2
letter value
<chr> <dbl>
1 D 2986.
2 E 3020.
3 F 3009.
4 G 2783.
5 H 2874.
6 I 2592.
7 J 3051.
8 D 2843.
9 E 2944.
10 F 3142.
# ... with 11 more rows
任何人都知道我怎樣才能達到相同的結果,但保持列/索引“高于平均水平”、“非常好”、“低于平均水平”?
uj5u.com熱心網友回復:
雖然 tibble 可以有行名(例如,從常規資料框轉換時),但在使用 [ 運算子進行子集化時,它們會被洗掉。嘗試將非 NULL 行名稱分配給 tibble 時將引發警告。
通常,最好避免使用行名,因為它們基本上是一個字符列,其語意與其他列不同。 https://tibble.tidyverse.org/reference/rownames.html
在您的情況下pivot_longer是洗掉行名,但您可以在轉換之前將行名保存為rownames_to_column來自tibble包的列, pivot_longer如下所示:
library(tibble)
library(tidyr)
library(dplyr)
result_long <- result %>%
rownames_to_column("id") %>%
pivot_longer(
-id,
names_to="combination",
values_to ="price.m"
)
A tibble: 21 x 3
id combination price.m
<chr> <chr> <dbl>
1 Above average D 2986.
2 Above average E 3020.
3 Above average F 3009.
4 Above average G 2783.
5 Above average H 2874.
6 Above average I 2592.
7 Above average J 3051.
8 Below average D 2843.
9 Below average E 2944.
10 Below average F 3142.
# ... with 11 more rows
uj5u.com熱心網友回復:
在base R中,我們可以轉換為table并用as.data.frame
as.data.frame.table(as.matrix(result))
-輸出
Var1 Var2 Freq
1 Above average D 2986.286
2 Below average D 2842.540
3 very Good D 2921.000
4 Above average E 3020.458
5 Below average E 2943.926
6 very Good E 2860.763
7 Above average F 3008.644
8 Below average F 3142.134
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/419365.html
標籤:
下一篇:as.data.frame.default(x[[i]],optional=TRUE)中的錯誤:無法將類'structure("mmquery_bioc",package
