我是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值并粘贴在面板中的相应年份。谢谢。
答案 0 :(得分:3)
使用dplyr
和tidyr
的解决方案。
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)