问题描述
我有一个数据集,其中观察结果以行给出,但是我想创建一个面板,其中观察值以列给出。例如:
A<-as.data.frame(rbind(c('A','B','C',5,6),c('A','D',2,3)))
colnames(A)<-c('State','County','City',1983,1984)
> A
State County City 1983 1984
1 A B C 5 6
2 A B D 2 3
如果我运行以下代码:
library(dplyr)
B<-B%>%
group_by(State,County,City)%>%
do(data.frame(year=seq(1983,1984,by=1)))
B<-cbind(B,0)
colnames(B)[5]<-'val'
for(i in unique(B$State)){
for(j in unique(B$County)){
for(k in unique(B$City)){
B$val[B$State==i&B$County==j&B$City==k]<-as.matrix(A[A$State==i&A$County==j&A$City==k,4:5])
}
}
}
B<-as.data.frame(B)
然后我得到
> B
State County City year val
1 A B C 1983 5
2 A B C 1984 6
3 A B D 1983 2
4 A B D 1984 3
我希望能够做到这一点,但最后不要求助于for循环,因为for循环在处理具有大量观察值的数据集时实际上效率很低(我的实际数据集有100,000个观察值)。
解决方法
使用tidyr的ivot_longer:
<div class="row">
<div id="breaker1" class="byspace" style="width:99%;padding-left:15px;">
<div id="accordion">
<div class="btn btn-dark btn2" data-toggle="collapse" data-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne">
<div class="card-header" id="headingOne">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne" style="color:#d0cfcf"> Collapsible Group Item #1 </button>
</h5>
</div>
<div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body"> ..................................... </div>
</div>
</div>
<div class="btn btn-dark btn2" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
<div class="card-header" id="headingTwo">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo" style="color:#d0cfcf"> Collapsible Group Item #2 </button>
</h5>
</div>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordion">
<div class="card-body"> ..................................... </div>
</div>
</div>
<div class="btn btn-dark btn2" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree" style="color:#d0cfcf"> Collapsible Group Item #3 </button>
</h5>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordion">
<div class="card-body"> ..................................... </div>
</div>
</div>
</div>
</div>
<div id="breaker2" class="byspace" style="width:99%;padding-left:15px;">
<div id="accordion2">
<div class="btn btn-primary btn2 collapsed" data-toggle="collapse" data-target="#collapseFour" aria-expanded="false" aria-controls="collapseFour">
<div class="card-header" id="heading2">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseFour" aria-expanded="false" aria-controls="collapseFour" style="color:#d0cfcf"> Collapsible Group Item #1 </button>
</h5>
</div>
<div id="collapseFour" class="collapse" aria-labelledby="heading2" data-parent="#accordion2">
<div class="card-body"> ..................................... </div>
</div>
</div>
<div class="btn btn-primary btn2" data-toggle="collapse" data-target="#collapse5" aria-expanded="false" aria-controls="collapse5">
<div class="card-header" id="heading3">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapse5" aria-expanded="false" aria-controls="collapse5" style="color:#d0cfcf"> Collapsible Group Item #2 </button>
</h5>
</div>
<div id="collapse5" class="collapse" aria-labelledby="heading3" data-parent="#accordion2">
<div class="card-body"> ..................................... </div>
</div>
</div>
<div class="btn btn-primary btn2" data-toggle="collapse" data-target="#collapse6" aria-expanded="false" aria-controls="collapse6">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapse6" aria-expanded="false" aria-controls="collapse6" style="color:#d0cfcf"> Collapsible Group Item #3 </button>
</h5>
</div>
<div id="collapse6" class="collapse" aria-labelledby="headingThree" data-parent="#accordion2">
<div class="card-body"> ..................................... </div>
</div>
</div>
</div>
</div>
</div>