重塑后使用 pivot_wider() 将第一列拆分为两列

时间:2021-07-21 02:17:06

标签: r

我使用了 pivot_wider 函数来转置来自以下位置的数据帧:

metric    shop1     shop2    shop3    shop4
sales     10        12       14       16
county    orange    sperling wood     riverside

使用此代码:

df_new <- pivot_wider(df, 
                      cols = c("shop1", "shop2", 
                      "shop3", "shop4"),
                      cols = shop)

我得到了以下内容:

measure  name      value
sales    shop1     10
sales    shop2     12
sales    shop3     14
sales    shop4     16
county   shop1     orange
county   shop2     sperling 
county   shop3     wood
county   shop4     riverside

我希望有单独的列用于销售、县和商店。我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以转置数据帧而不是 pivot_wider

library(dplyr)
library(tibble)

df %>%
  column_to_rownames('metric') %>%
  t %>%
  as.data.frame() %>%
  type.convert(as.is = TRUE) %>%
  rownames_to_column('shop') -> res

res

#   shop sales    county
#1 shop1    10    orange
#2 shop2    12  sperling
#3 shop3    14      wood
#4 shop4    16 riverside

数据

df <- structure(list(metric = c("sales", "county"), shop1 = c("10", 
"orange"), shop2 = c("12", "sperling"), shop3 = c("14", "wood"
), shop4 = c("16", "riverside")), class = "data.frame", row.names = c(NA, -2L))

答案 1 :(得分:0)

从您当前的数据集来看,您应该考虑这样做:

data.table::transpose(df, make.names = TRUE,keep.names = 'shop')

   shop sales    county
1 shop1    10    orange
2 shop2    12  sperling
3 shop3    14      wood
4 shop4    16 riverside