【发布时间】:2016-05-14 10:41:55
【问题描述】:
我有以下数据框:
st <- data.frame(
se = rep(1:2, 5),
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2))
st$xy <- paste(st$X,",",st$Y)
st <- st[c("se","xy")]
但我希望它是以下内容:
1 2 3 4 5
-1.53697673029089 , 2.10652020463275 -1.02183940974772 , 0.623009466458354 1.33614674072657 , 1.5694345481646 0.270466789820086 , -0.75670874554064 -0.280167896821629 , -1.33313822867893
0.26012874418111 , 2.87972571647846 -1.32317949800031 , -2.92675188421021 0.584199000313255 , 0.565499464846637 -0.555881716346136 , -1.14460518414649 -1.0871665543915 , -3.18687136890236
我的意思是当se的值相同时,做一个列绑定。
您有什么想法可以做到这一点吗?
我对spread(tidyr) 没有运气,我猜这涉及sapply、cbind 和if 声明。因为真实数据涉及超过 35000 行。
【问题讨论】:
-
试试看,
library(dplyr); st %>% group_by(se) %>% mutate(idx = row_number()) %>% spread(idx, xy) -
感谢@docendodiscimus ,它运行良好!
-
不明白mutate中的idx参数是什么?
-
它在每组se中创建一个索引列,从1、2、3、...开始计数。然后将该索引用作扩展 xy 列的键。只需删除最后一个管道元素即可查看它的确切作用