我有以下面板数据:
firmid date return
1 1 1
1 2 1
1 3 1
2 2 2
2 3 2
3 1 2
3 3 2
我想将这种长格式转换为宽格式,但仅限日期1看起来像这样
firmid return in date=1
1 1
3 2
我感谢任何建议!
答案 0 :(得分:2)
df <- read.table(header = T, text = "firmid date return
1 1 1
1 2 1
1 3 1
2 2 2
2 3 2
3 1 2
3 3 2")
Base R解决方案:
df <- df[df$date == 1, ]
df$date <- NULL
df
firmid return
1 1 1
6 3 2
data.table
解决方案:
library(data.table)
setDT(df)
df <- df[date == 1, ]
df[, date := NULL]
firmid return
1: 1 1
2: 3 2
答案 1 :(得分:1)
您也可以使用dplyr
来实现它:
library(dplyr)
df2 <- df %>%
filter(date == 1) %>%
select(-date)
# firmid return
#1 1 1
#2 3 2
答案 2 :(得分:0)
另一种dplyr
解决方案,允许您在firmid中拥有多个返回值:
df %>%
filter(date == 1) %>%
group_by(firmid, return) %>%
summarise()