我有一个包含如下数据的数据框:
A B C D
a1 b1 c1 d1
a1 b1 c2 d2
a1 b1 c3 d3
a2 b2 c1 d1
a2 b2 c3 d3
我如何将其转化为?
A B c1 c2 c3
a1 b1 d1 d2 d3
a2 b2 d1 d3
答案 0 :(得分:7)
在基础R中,您可以使用reshape()
:
reshape(mydf, direction = "wide", idvar = c("A", "B"), timevar = "C")
# A B D.c1 D.c2 D.c3
# 1 a1 b1 d1 d2 d3
# 4 a2 b2 d1 <NA> d3
您也可以同时使用tidyr
和dplyr
:
library(dplyr)
# devtools::install_github("hadley/tidyr")
library(tidyr)
mydf %>% group_by(A, B) %>% spread(C, D)
# Source: local data frame [2 x 5]
#
# A B c1 c2 c3
# 1 a1 b1 d1 d2 d3
# 2 a2 b2 d1 NA d3
答案 1 :(得分:5)
这是使用reshape2
库的好地方。你可以做到
library(reshape2)
dcast(dd, A+B~C)
获取
A B c1 c2 c3
1 a1 b1 d1 d2 d3
2 a2 b2 d1 <NA> d3
根据需要。