将行中的数据转换为R

问题描述

我有一个数据集,其中观察结果以行给出,但是我想创建一个面板,其中观察值以列给出。例如:

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>