如何解决在R中应用数据帧的层级改组/排序
我有一个数据帧,我想在其中进行洗牌或更一般地对值进行分层排序,但是我被卡住了。这是我的示例:
library(plyr)
set.seed(123)
df <- data.frame(a = rep(letters[1:4],each = 10),b = rnorm(40))
> head(df)
a b
1 a -0.1264280
2 a 0.7284234
3 a -1.8782385
4 a 0.2530623
5 a 0.7577013
6 a -0.9339964
在此示例中,我想仅对字母内的值进行混合(采样),以便不能将在列a中分配给字母a的值分配给其他任何字母,而只能将其分配给其他行而不是b ,c或d。
我已经尝试过这个ddply(df,c('a'),b = sample(b))
,但这没用。
解决方法
使用dplyr
,group_by(a)
然后使用mutate(b = sample(b))
library(dplyr)
head(df,10)
a b
1 a -0.56047565
2 a -0.23017749
3 a 1.55870831
4 a 0.07050839
5 a 0.12928774
6 a 1.71506499
7 a 0.46091621
8 a -1.26506123
9 a -0.68685285
10 a -0.44566197
df %>% group_by(a) %>% mutate(b = sample(b))
# A tibble: 40 x 2
# Groups: a [4]
a b
<chr> <dbl>
1 a 1.56
2 a 0.461
3 a 0.0705
4 a 1.72
5 a -0.560
6 a -0.446
7 a -1.27
8 a 0.129
9 a -0.230
10 a -0.687
# ... with 30 more rows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。