作者DrRd (就这样吧)
看板R_Language
标题[问题] 资料长<->宽变换
时间Sat Aug 13 09:51:49 2016
[问题类型]:
意见调查(我对R 有个很棒的想法,想问问大家的意见)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
要将宽型的资料转成长型的资料,但是要合并成的新变项有两个
以iris为例
本来iris的资料长这样
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|:------------:|:-----------:|:------------:|:-----------:|:-------:|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
我想要转成
| Species | SorP.x | Length | Width |
|:-------:|:------------:|:------:|:-----:|
| setosa | Sepal | 5.1 | 3.5 |
| setosa | Sepal | 5.1 | 3.0 |
| setosa | Pepal | 5.1 | 3.2 |
| setosa | Pepal | 5.1 | 3.1 |
| setosa | Sepal | 5.1 | 3.6 |
目前我想到的作法是先弄出两个长期的资料,一个是Length另一个是Width
然後再把两个merge起来,请问大家有没有什麽其他的方法?可以不用先弄成两个资料?
[程式范例]:
data("iris")
head(iris)
library(tidyr);library(dplyr)
aa <- merge(
gather(iris[-c(2,4)],key = SorP, value = Length, Sepal.Length, Petal.Length),
gather(iris[-c(1,3)],key = SorP, value = Width, Sepal.Width, Petal.Width),
by.x = "Species", by.y = "Species")
[环境叙述]:
R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)
[关键字]:
资料格式、tidyr
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.248.40
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1471053111.A.7A5.html
1F:→ yomilin: 用spread应该可以哦 08/13 13:01
2F:→ DrRd: 感谢提示 08/13 21:52