【问题标题】:Copy two column values from one data frame to one column but two rows in another data frame将两个列值从一个数据框中复制到一列,但在另一个数据框中复制两行
【发布时间】:2018-03-29 05:09:30
【问题描述】:

我是 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 销售年份 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 值并将相应年份粘贴到面板中。谢谢。

【问题讨论】:

标签: r dataframe


【解决方案1】:

使用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)

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2018-08-03
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2021-12-26
    相关资源
    最近更新 更多