我想在每个级别的bvar中单独应用avar。
mydf <- data.frame( avar = c("A", "B", "C", 4, 5, 6, 7, 8, 9, 10),
bvar = rep(1:2, each = 5))
mydf
avar bvar
1 A 1
2 B 1
3 C 1
4 4 1
5 5 1
6 6 2
7 7 2
8 8 2
9 9 2
10 10 2
我试过plyr
require(plyr)
daply ( mydf, .(avar), sample)
结果糟糕。 plyr替代品也欢迎
答案 0 :(得分:5)
试试这个:
> daply(mydf, .(bvar), sample)
$`1`
avar bvar
1 A 1
2 B 1
3 C 1
4 4 1
5 5 1
$`2`
avar bvar
6 6 2
7 7 2
8 8 2
9 9 2
10 10 2
或
> daply(mydf, .(bvar), summarize, ans = sample(avar))
$`1`
ans
1 A
2 C
3 4
4 B
5 5
$`2`
ans
1 10
2 9
3 7
4 8
5 6
答案 1 :(得分:1)
各种基础解决方案:
> mydf$rnd <- ave(mydf$avar, mydf$bvar, FUN=sample)
> mydf
avar bvar rnd
1 A 1 C
2 B 1 B
3 C 1 5
4 4 1 4
5 5 1 A
6 6 2 7
7 7 2 9
8 8 2 6
9 9 2 10
10 10 2 8
> aggregate(mydf$avar, mydf["bvar"], FUN=sample)
bvar x.1 x.2 x.3 x.4 x.5
1 1 4 C 5 B A
2 2 7 9 10 8 6
> by(mydf$avar, mydf[["bvar"]], FUN=sample)
mydf[["bvar"]]: 1
[1] C B 5 4 A
Levels: 10 4 5 6 7 8 9 A B C
-----------------------------------------------------------
mydf[["bvar"]]: 2
[1] 9 8 6 10 7
Levels: 10 4 5 6 7 8 9 A B C