R语言数据框行转列实例

目的:需要把数据框的行列进行转置

方法:

# 原始数据框
> hrl_jd_mon
    年份 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
1 2010年 51.2 45.8 55.8 62.9 63.8 59.5 80.5 78.0 66.0 92.3  50.80   55.6
2 2011年 54.8 54.4 64.1 78.5 64.5 63.4 95.3 89.2 68.8 86.1  51.40   52.4
3 2012年 53.0 46.1 52.8 72.6 49.8 50.1 65.3 64.6 54.4 73.0  39.40   40.5
4 2013年 40.7 43.7 45.1 50.9 40.7 41.1 50.7 54.5 37.8 62.5  30.20   29.6
5 2014年 28.2 34.1 30.3 33.4 31.5 23.5 32.3 33.0 22.5 29.9   3.31    0.0

# 转置过程:
> 月份 <- c("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月")

> data.frame(hrl_jd_mon,row.names=1)
       一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
2010年 51.2 45.8 55.8 62.9 63.8 59.5 80.5 78.0 66.0 92.3  50.80   55.6
2011年 54.8 54.4 64.1 78.5 64.5 63.4 95.3 89.2 68.8 86.1  51.40   52.4
2012年 53.0 46.1 52.8 72.6 49.8 50.1 65.3 64.6 54.4 73.0  39.40   40.5
2013年 40.7 43.7 45.1 50.9 40.7 41.1 50.7 54.5 37.8 62.5  30.20   29.6
2014年 28.2 34.1 30.3 33.4 31.5 23.5 32.3 33.0 22.5 29.9   3.31    0.0


> t1 <- t(data.frame(hrl_jd_mon,row.names=1))
> t1 
       2010年 2011年 2012年 2013年 2014年
一月     51.2   54.8   53.0   40.7  28.20
二月     45.8   54.4   46.1   43.7  34.10
三月     55.8   64.1   52.8   45.1  30.30
四月     62.9   78.5   72.6   50.9  33.40
五月     63.8   64.5   49.8   40.7  31.50
六月     59.5   63.4   50.1   41.1  23.50
七月     80.5   95.3   65.3   50.7  32.30
八月     78.0   89.2   64.6   54.5  33.00
九月     66.0   68.8   54.4   37.8  22.50
十月     92.3   86.1   73.0   62.5  29.90
十一月   50.8   51.4   39.4   30.2   3.31
十二月   55.6   52.4   40.5   29.6   0.00

> t2 <- as.data.frame(t1,row.names=F)
> t2
   2010年 2011年 2012年 2013年 2014年
1    51.2   54.8   53.0   40.7  28.20
2    45.8   54.4   46.1   43.7  34.10
3    55.8   64.1   52.8   45.1  30.30
4    62.9   78.5   72.6   50.9  33.40
5    63.8   64.5   49.8   40.7  31.50
6    59.5   63.4   50.1   41.1  23.50
7    80.5   95.3   65.3   50.7  32.30
8    78.0   89.2   64.6   54.5  33.00
9    66.0   68.8   54.4   37.8  22.50
10   92.3   86.1   73.0   62.5  29.90
11   50.8   51.4   39.4   30.2   3.31
12   55.6   52.4   40.5   29.6   0.00

# 最终成品
> t3 <- as.data.frame(cbind(月份,t2))
> t3
     月份 2010年 2011年 2012年 2013年 2014年
1    一月   51.2   54.8   53.0   40.7  28.20
2    二月   45.8   54.4   46.1   43.7  34.10
3    三月   55.8   64.1   52.8   45.1  30.30
4    四月   62.9   78.5   72.6   50.9  33.40
5    五月   63.8   64.5   49.8   40.7  31.50
6    六月   59.5   63.4   50.1   41.1  23.50
7    七月   80.5   95.3   65.3   50.7  32.30
8    八月   78.0   89.2   64.6   54.5  33.00
9    九月   66.0   68.8   54.4   37.8  22.50
10   十月   92.3   86.1   73.0   62.5  29.90
11 十一月   50.8   51.4   39.4   30.2   3.31
12 十二月   55.6   52.4   40.5   29.6   0.00

> str(t3)
'data.frame':        12 obs. of  6 variables:
$ 月份  : Factor w/ 12 levels "八月","二月",..: 12 2 6 10 11 4 5 1 3 9 ...
$ 2010年: num  51.2 45.8 55.8 62.9 63.8 59.5 80.5 78 66 92.3 ...
$ 2011年: num  54.8 54.4 64.1 78.5 64.5 63.4 95.3 89.2 68.8 86.1 ...
$ 2012年: num  53 46.1 52.8 72.6 49.8 50.1 65.3 64.6 54.4 73 ...
$ 2013年: num  40.7 43.7 45.1 50.9 40.7 41.1 50.7 54.5 37.8 62.5 ...
$ 2014年: num  28.2 34.1 30.3 33.4 31.5 23.5 32.3 33 22.5 29.9 ...

原贴地址:http://f.dataguru.cn/forum.php?mod=viewthread&tid=453010&page=1#pid1267442

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值