尝试将行强制转换为R中的列

时间:2019-02-07 22:34:34

标签: r

我正在尝试在R中做一个非常简单的事情,转置数据集,以便我可以创建一个主键以与具有许多值的其他表联接。

我已经尝试过dcast和聚合,但是还没有使它们起作用。 这是我的数据框当前的样子 Current R dataframe

这就是我想要的样子: New R dataframe

2 个答案:

答案 0 :(得分:0)

您可以在帖子中添加代码,因此请粘贴创建data.frame的代码,如下所示:

df <- data.frame(
  Make     = c('Ford', 'Ford', 'Ford', 'Chevy', 'Chrysler', 'Chrysler'),
  DateSold = c('2017-07-01', '2017-08-01', '2017-10-01', '2017-01-01', '2017-03-01', '2017-04-01'),
  Amount   = c(30, 15, 25, 23, 22, 21) * 1e3
)

现在,对于您的问题,您可以使用库 tidyverse ,该库具有许多有用的功能来处理数据。您可以逐行执行以下代码,以了解到达解决方案的不同步骤。

library(tidyverse)

df %>%
  gather(-Make, key = Column, value = Value) %>%
  group_by(Make, Column) %>% 
  mutate(Count = 1:n()) %>% 
  unite(Column_count, Column, Count) %>%
  spread(Column_count, Value)

#   Make     Amount_1 Amount_2 Amount_3 DateSold_1 DateSold_2 DateSold_3
#   <fct>    <chr>    <chr>    <chr>    <chr>      <chr>      <chr>     
# 1 Chevy    23000    NA       NA       2017-01-01 NA         NA        
# 2 Chrysler 22000    21000    NA       2017-03-01 2017-04-01 NA        
# 3 Ford     30000    15000    25000    2017-07-01 2017-08-01 2017-10-01

答案 1 :(得分:0)

使用重塑,您可以像这样进行健身

 reshape(transform(df,time=ave(Amount,Make,FUN=seq_along)),dir = 'wide',idvar='Make')

      Make DateSold.1 Amount.1 DateSold.2 Amount.2 DateSold.3 Amount.3
1     Ford 2017-07-01    30000 2017-08-01    15000 2017-10-01    25000
4    Chevy 2017-01-01    23000       <NA>       NA       <NA>       NA
5 Chrysler 2017-03-01    22000 2017-04-01    21000       <NA>       NA