将两个列值从一个数据帧复制到一个列,但在另一个数据帧中复制两行

时间:2017-10-17 13:25:52

标签: r dataframe

我是R的新手,并在两周前开始。我有一个数据集,我正在尝试将其转换为面板数据。见下面的数据集

ID  Empl93   Empl95  Sales93  Sales95
1    20       30       200      150
2    14       40       350       90
4    50       10       100      220
9    29       45       400      560
20   42       23       190      350

我需要将其转换为下面的面板

ID   Emply    Sales   Year
1    20       200     1993
1    30       150     1995
2    14       350     1993
2    40       90      1995
4    50       100     1993
4    10       220     1995
9    29       400     1993
9    45       560     1995

行大约1600,由随机ID组成,我可以将新列“Year”添加到数据框中。我也可以使用下面的代码添加重复的行:

newdata <- newdata[rep(seq_len(nrow(newdata)), each=2),]

我的问题是如何从第一个数据框中复制Empl93,Empl95,Sales93,Sales95值并粘贴在面板中的相应年份。谢谢。

1 个答案:

答案 0 :(得分:3)

使用dplyrtidyr的解决方案。

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  gather(Key, Value, -ID) %>%
  extract(Key, into = c("Type", "Year"), "([A-Za-z]+)([0-9]+)") %>%
  mutate(Type = sub("Empl", "Emply", Type),
         Year = as.integer(paste0("19", Year))) %>%
  spread(Type, Value) %>%
  select(ID, Emply, Sales, Year)
dt2
   ID Emply Sales Year
1   1    20   200 1993
2   1    30   150 1995
3   2    14   350 1993
4   2    40    90 1995
5   4    50   100 1993
6   4    10   220 1995
7   9    29   400 1993
8   9    45   560 1995
9  20    42   190 1993
10 20    23   350 1995

数据

dt <- read.table(text = "ID  Empl93   Empl95  Sales93  Sales95
1    20       30       200      150
2    14       40       350       90
4    50       10       100      220
9    29       45       400      560
20   42       23       190      350",
                 header = TRUE, stringsAsFactors = FALSE)