【发布时间】:2017-03-20 00:27:12
【问题描述】:
我有一个数据框。说,
data.frame(x = c(1, 3), y = c(5, 0), id = c("A", "B"))
现在我想复制它,所以我在同一个 data.frame 中有一个副本。我最终会得到这样的结果,
data.frame(x = c(1, 3, 1, 3), y = c(5, 0, 5, 0), id = c("A", "B", "A", "B"))
现在,这与我想要的非常接近,但我还想附加 id 列,以根据我想要的重复数使它们对每一行都是唯一的(在这种情况下只有一个,但我想要 n 个) .
data.frame(x = c(1, 3, 1, 3), y = c(5, 0, 5, 0), id = c("A-1", "B-1", "A-2", "B-2"))
所以,如您所见,我可以全神贯注地制作对象,但我想从使用基本 R 编写“hacky”代码转变为使用 dplyr 复制此功能。
【问题讨论】:
-
在基础 R 中不是特别 hacky:
out <- dat[rep(1:nrow(dat), 2),]; out$id <- paste(out$id, rep(1:2, each=nrow(dat)), sep="-") -
同样相关 - stackoverflow.com/questions/38237350/… -
dat %>% slice(rep(1:n(), 2))将帮助您完成大部分工作,但可以说更复杂。 -
我喜欢你的解决方案。你认为尝试使用 dplyr 来解决这个问题是错误的吗?看起来您的解决方案很容易阅读且速度很快。
-
我很难看你是否能做到 a) 比我发布的 2 行更简单 b) 大数据更快。在这种情况下,基数 R 似乎完全可以接受。