问题描述
common.names.fullname
我想以这样的方式重新排列它,使最终数据显示为这样
df <- data.frame(Country = c("USA","USA","UK","UK"),Measure = c("Revenue","Profit","emp","Revenue","emp"),Year_19 = c("250000","100000","15","140000","25000","4"),Year_20 = c("130000","44000","8","76000","13000","3"))
无法理解如何做到这一点。有人可以帮忙吗?谢谢
解决方法
我们可以在 values_from
中指定多列
library(dplyr)
library(tidyr)
df %>%
pivot_wider(names_from = Measure,values_from = c(Year_19,Year_20))
-输出
# A tibble: 2 x 7
# Country Year_19_Revenue Year_19_Profit Year_19_emp Year_20_Revenue Year_20_Profit Year_20_emp
# <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 USA 250000 100000 15 130000 44000 8
#2 UK 140000 25000 4 76000 13000 3
,
基本的 R 选项
reshape(
df,direction = "wide",idvar = "Country",timevar = "Measure"
)
给予
Country Year_19.Revenue Year_20.Revenue Year_19.Profit Year_20.Profit
1 USA 250000 130000 100000 44000
4 UK 140000 76000 25000 13000
Year_19.emp Year_20.emp
1 15 8
4 4 3
带有 data.table
的 dcast
选项
> dcast(setDT(df),Country~Measure,value.var = c("Year_19","Year_20"))
Country Year_19_Profit Year_19_Revenue Year_19_emp Year_20_Profit
1: UK 25000 140000 4 13000
2: USA 100000 250000 15 44000
Year_20_Revenue Year_20_emp
1: 76000 3
2: 130000 8