我正在尝试在R中做一个非常简单的事情,转置数据集,以便我可以创建一个主键以与具有许多值的其他表联接。
我已经尝试过dcast和聚合,但是还没有使它们起作用。 这是我的数据框当前的样子 Current R dataframe
这就是我想要的样子: New R dataframe
答案 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