我有一个像这样的数据框架:
avg_cost avg_assets avg_liabilities avg_income
100432 203998 76020 89021
我想在R
中对数据框进行转置type stat
avg_cost 100432
avg_assets 203998
avg_liabilities 76020
avg_income 89021
我试过使用pivot_longer,但我没有一个列来pivot。我只想对整个数据框进行转置。我该怎么做呢?
如果只有一行,则以下内容足够。如果不能使用pivot/塑形/熔化
in Base R:
setNames(rev(stack(df1)), c('stat', 'type'))
stat type
1 avg_cost 100432
2 avg_assets 203998
3 avg_liabilities 76020
4 avg_income 89021
在tidyverse: enframe(unlist(df1), 'stat', 'type')
# A tibble: 4 x 2
stat type
<chr> <int>
1 avg_cost 100432
2 avg_assets 203998
3 avg_liabilities 76020
4 avg_income 89021
在datatable: data.table::transpose(df1, keep.names = 'stat')
stat V1
1 avg_cost 100432
2 avg_assets 203998
3 avg_liabilities 76020
4 avg_income 89021
如果是单行数据集,则使用data.frame
data.frame(type = names(df1), stat = unlist(df1, use.names = FALSE))
type stat
1 avg_cost 100432
2 avg_assets 203998
3 avg_liabilities 76020
4 avg_income 89021
为了简化,我们可以使用列名作为行名;如果您绝对需要将它们放在一个列中,那么很容易将行名转换为一个列。
data.frame(stat = t(df1))
# stat
# avg_cost 100432
# avg_assets 203998
# avg_liabilities 76020
# avg_income 89021
或者如果有多行:
df1.pivot <- as.data.frame(t(df1))
names(df1.pivot) <- c("stat", ...)
数据:
df1 <- structure(list(avg_cost = 100432, avg_assets = 203998, avg_liabilities = 76020,
avg_income = 89021),
row.names = c(NA, -1L), class = "data.frame")
我想是这样的吧?在这种情况下,您将需要使用purrr::tranpose
。
library(tidyverse)
df1 <- tribble(~avg_cost, ~avg_assets, ~avg_liabilities, ~avg_income,
100432, 203998, 76020, 89021)
df2 <- tibble(stat = df1 %>% purrr::transpose()) %>%
unnest(c(stat)) %>%
mutate(type = names(stat), .before = 1) %>%
unnest(c(stat)); df2
#> # A tibble: 4 × 2
#> type stat
#> <chr> <dbl>
#> 1 avg_cost 100432
#> 2 avg_assets 203998
#> 3 avg_liabilities 76020
#> 4 avg_income 89021
由reprex包(v2.0.1)于2022-04-15创建