根据文件本身的条件拆分文件
Splitting a File Based on Conditions in the File itself
我有以下数据框(组,my_data):
library(dplyr)
id_sample <- 1:25
id <- sample(id_sample, replace = TRUE, 1000)
var_1 = rnorm(1000,100,100)
var_2 = rnorm(1000,100,100)
var_3 = rnorm(1000,100,100)
data = data.frame(id, var_1, var_2, var_3)
my_data = data.frame(data %>% group_by(id) %>% mutate(index = row_number(id)))
my_data <- my_data[order(my_data$id),]
groups = data.frame(my_data %>% group_by(id) %>% summarise( count = n()))
groups = transform(groups, rand = ceiling(runif(count) * count))
head(groups)
id count rand
1 1 48 33
2 2 32 7
3 3 36 4
4 4 57 43
5 5 34 23
6 6 51 5
使用“groups”和“my_data”,我想创建两个数据集(例如“data_a”、“data_b”),将“my_data”基于“groups$count”和“groups$rand”。例如:
- 对于 id = 1,“data_a”将包含前 33 行,“data_b”将包含剩余的 48-33 行
- 对于 id = 2,“data_a”将包含前 7 行,“data_b”将包含剩余的 32-7 行
- 对于 id = 3,“data_a”将包含前 4 行,“data_b”将包含剩余的 36-4 行
- 等等
最后,我将只使用这些“项目符号”中的每一个的 rbind()
命令并创建最终的“data_a”和“data_b”文件。
您可以通过 id
将 groups
数据与 my_data
连接起来,创建一个组列,其中“A”组用于前 rand
行,组 b
剩余。最后我们split
将数据集分成两组。
library(dplyr)
list_data <- my_data %>%
inner_join(groups, by = 'id') %>%
group_by(id) %>%
mutate(group = letters[as.integer(row_number() > rand) + 1]) %>%
ungroup %>%
split(.$group)
将它们作为 2 个独立的数据集
#If you want to name the two datasets differently.
#names(list_data) <- c('data_a', 'data_b')
list2env(list_data, .GlobalEnv)
我有以下数据框(组,my_data):
library(dplyr)
id_sample <- 1:25
id <- sample(id_sample, replace = TRUE, 1000)
var_1 = rnorm(1000,100,100)
var_2 = rnorm(1000,100,100)
var_3 = rnorm(1000,100,100)
data = data.frame(id, var_1, var_2, var_3)
my_data = data.frame(data %>% group_by(id) %>% mutate(index = row_number(id)))
my_data <- my_data[order(my_data$id),]
groups = data.frame(my_data %>% group_by(id) %>% summarise( count = n()))
groups = transform(groups, rand = ceiling(runif(count) * count))
head(groups)
id count rand
1 1 48 33
2 2 32 7
3 3 36 4
4 4 57 43
5 5 34 23
6 6 51 5
使用“groups”和“my_data”,我想创建两个数据集(例如“data_a”、“data_b”),将“my_data”基于“groups$count”和“groups$rand”。例如:
- 对于 id = 1,“data_a”将包含前 33 行,“data_b”将包含剩余的 48-33 行
- 对于 id = 2,“data_a”将包含前 7 行,“data_b”将包含剩余的 32-7 行
- 对于 id = 3,“data_a”将包含前 4 行,“data_b”将包含剩余的 36-4 行
- 等等
最后,我将只使用这些“项目符号”中的每一个的 rbind()
命令并创建最终的“data_a”和“data_b”文件。
您可以通过 id
将 groups
数据与 my_data
连接起来,创建一个组列,其中“A”组用于前 rand
行,组 b
剩余。最后我们split
将数据集分成两组。
library(dplyr)
list_data <- my_data %>%
inner_join(groups, by = 'id') %>%
group_by(id) %>%
mutate(group = letters[as.integer(row_number() > rand) + 1]) %>%
ungroup %>%
split(.$group)
将它们作为 2 个独立的数据集
#If you want to name the two datasets differently.
#names(list_data) <- c('data_a', 'data_b')
list2env(list_data, .GlobalEnv)