我们说我有一张桌子如下图所示。
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
我非常感谢您的见解。
答案 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
此列表现在包含数据框,其中第一个变量是您想要的。这可能是更好的方法,但这就是我提出来的。