将列(带有数字的A列)拆分为子列,列名为

时间:2016-10-23 00:52:51

标签: r

我们说我有一张桌子如下图所示。

 Temp_C     Source
1 16.73000  20090510
2 16.73750  20090510
3 16.64000  20090511
4 16.38667  20090511
5 16.25625  20090511

我希望将此表分为两列,列名为20090510和20090511.我不需要名称' Tem_c'和来源为colnames。我的产品应该如下:

 20090510    
1 16.73000  
2 16.73750 

20090511
1 16.64000 
2 16.38667  
3 16.25625

我非常感谢您的见解。

1 个答案:

答案 0 :(得分:0)

我删除了原来的答案,因为它很差。对困惑感到抱歉。 我在这里将数据创建为数据帧。将来,当您提出问题以提供下面的前3行代码时,这很好。

Temp_C<-c(16.73000,16.73750,16.64000,16.38667,16.25625)
Source<-c("20090510","20090510","20090511","20090511","20090511")
df<-data.frame(cbind(Temp_C,Source))
df
    Temp_C   Source
1    16.73 20090510
2  16.7375 20090510
3    16.64 20090511
4 16.38667 20090511
5 16.25625 20090511

接下来,我使用split()以您请求的方式解析您的数据,但第一个变量的名称不是您请求的Source的值。

mylist<-split(df,f=Source) ## split your data frame by Source)
mylist
$`20090510`
   Temp_C   Source
1   16.73 20090510
2 16.7375 20090510

$`20090511`
    Temp_C   Source
3    16.64 20090511
4 16.38667 20090511
5 16.25625 20090511

然后我使用一个小循环来重命名每个列表项的第一列等于Source中的值。我也是

for (i in 1:length(mylist)){
  names(mylist[[i]])[1]  <- as.character(mylist[[i]][1,2])
  rownames(mylist[[i]])<-NULL
  }
mylist
$`20090510`
  20090510   Source
1    16.73 20090510
2  16.7375 20090510

$`20090511`
  20090511   Source
1    16.64 20090511
2 16.38667 20090511
3 16.25625 20090511

此列表现在包含数据框,其中第一个变量是您想要的。这可能是更好的方法,但这就是我提出来的。