按组对多级数据进行重采样
Resampling multilevel data by group
我正在尝试编写一个函数来对嵌套在组中的名称进行重新采样。我的函数适用于不考虑组的重采样,但我不想创建不在同一组中的名称样本。
函数如下,其中 x 是所有名称的向量(有些重复),a 是唯一名称观察向量,b 是随机顺序的唯一名称向量。
rep <- function(x,a,b){
for(i in 1:length(a)){
x1 <- x
x1[which(x==a[i])] <- b[i]
}
x1
}
x <- c("Smith", "Jones", "Washington", "Miller", "Wells", "Smith", "Smith", "Miller")
a <- sort(unique(x))
b <- sample(a, length(a))
dat <- rep(x, a, b)
View(dat)
"Smith" "Jones" "Washington" "Miller" "Jones" "Smith" "Smith" "Miller"
但是,每个名称都嵌套在一个组中,因此我需要避免创建不在同一组中的名称样本。例如:
x groupid
Smith A1
Jones B1
Washington C1
Miller A2
Wells B1
Smith A2
Smith A3
Miller A3
我该如何解释?
使用 tidyverse 包会更容易实现:
library(tidyverse)
txt <- 'x groupid
Smith A1
Jones B1
Washington C1
Miller A2
Wells B1
Smith A2
Smith A3
Miller A3'
df <- read_table(file = txt)
set.seed(0)
df.new <- df %>%
group_by(groupid) %>%
mutate(
b = sample(unique(x), n(), replace = T)
) %>%
arrange(groupid)
x groupid b
<chr> <chr> <chr>
1 Smith A1 Smith
2 Miller A2 Miller
3 Smith A2 Smith
4 Smith A3 Smith
5 Miller A3 Miller
6 Jones B1 Wells
7 Wells B1 Jones
8 Washington C1 Washington
我正在尝试编写一个函数来对嵌套在组中的名称进行重新采样。我的函数适用于不考虑组的重采样,但我不想创建不在同一组中的名称样本。
函数如下,其中 x 是所有名称的向量(有些重复),a 是唯一名称观察向量,b 是随机顺序的唯一名称向量。
rep <- function(x,a,b){
for(i in 1:length(a)){
x1 <- x
x1[which(x==a[i])] <- b[i]
}
x1
}
x <- c("Smith", "Jones", "Washington", "Miller", "Wells", "Smith", "Smith", "Miller")
a <- sort(unique(x))
b <- sample(a, length(a))
dat <- rep(x, a, b)
View(dat)
"Smith" "Jones" "Washington" "Miller" "Jones" "Smith" "Smith" "Miller"
但是,每个名称都嵌套在一个组中,因此我需要避免创建不在同一组中的名称样本。例如:
x groupid
Smith A1
Jones B1
Washington C1
Miller A2
Wells B1
Smith A2
Smith A3
Miller A3
我该如何解释?
使用 tidyverse 包会更容易实现:
library(tidyverse)
txt <- 'x groupid
Smith A1
Jones B1
Washington C1
Miller A2
Wells B1
Smith A2
Smith A3
Miller A3'
df <- read_table(file = txt)
set.seed(0)
df.new <- df %>%
group_by(groupid) %>%
mutate(
b = sample(unique(x), n(), replace = T)
) %>%
arrange(groupid)
x groupid b
<chr> <chr> <chr>
1 Smith A1 Smith
2 Miller A2 Miller
3 Smith A2 Smith
4 Smith A3 Smith
5 Miller A3 Miller
6 Jones B1 Wells
7 Wells B1 Jones
8 Washington C1 Washington