#r
#r
Вопрос:
Привет, я ищу функцию, которая может разделить набор данных, когда мы передаем список векторов в качестве входных параметров. допустим, у меня есть фрейм данных, как показано ниже.
data<-data.frame( Q1=c(1,1,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA),
Q2=c(1,1,1,1,1,NA,NA,NA,NA,1,1,1,1,1,NA,NA,NA,1,1,1,NA),
Q3=c(1,1,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,1,NA),
Q4=c(1,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1,NA,1),
Q5=c(NA,1,NA,NA,1,NA,1,1,NA,NA,1,NA,1,1,NA,1,NA,NA,1,NA,1),
Q6=c(1,NA,1,NA,NA,1,NA,NA,1,NA,1,NA,1,1,NA,1,1,NA,NA,NA,1),
Q7=c(NA,1,1,NA,1,NA,1,1,NA,NA,1,1,NA,NA,NA,1,1,NA,1,NA,NA),
region=c(1,2,1,1,1,2,1,2,2,1,2,NA,1,1,2,2,2,1,1,1,2)
)
после маркировки
data$Q5<-factor(data$Q5, levels=c(1), labels=c("USA"))
data$Q6<-factor(data$Q6, levels=c(1), labels=c("Worlds"))
data$region<-factor(data$region, levels=c(1,2), labels=c("ALL","Special"))
и допустим, у меня есть список векторов, таких как
lst <- c(total,Q6,Q5,.....)
Функция создаст список подмножеств фреймов данных для lst
если у lst есть total, то целые данные (исходные данные) для Q6 фильтруют все значения, отличные от NA, а затем создают целое подмножество для Q6 для Q5 фильтруют все значения, отличные от NA, а затем создают целое подмножество для Q5
входной параметр для функции будет иметь вид
split_data(dataset= data, list_d= lst)
для этого требуется вывод списка фреймов данных
данные <- данные
Q6 <- data %>% filter(Q6==1)
Q5 <- data %>% filter(Q5==1)
lstt <- list(total,V8,Q5)
lstt
Комментарии:
1. Каков ваш список векторов (т. Е. Это
lst <- c(total,Q6,Q5,.....)
)? Это просто символьный вектор, подобныйc("total", "Q6", "Q5")
?2. да, это символьный вектор,
Ответ №1:
Это то, что вы хотите?
split_data <- function(df, lst) {
lapply(lst, function(x, df) {
if (x == "total")
return(df)
df[!is.na(df[[x]]), ]
}, df)
}
Вывод
> split_data(data, c("total", "Q5", "Q6"))
[[1]]
Q1 Q2 Q3 Q4 Q5 Q6 Q7 region
1 1 1 1 1 NA 1 NA 1
2 1 1 1 NA 1 NA 1 2
3 NA 1 NA NA NA 1 1 1
4 NA 1 NA NA NA NA NA 1
5 NA 1 NA NA 1 NA 1 1
6 NA NA NA NA NA 1 NA 2
7 NA NA NA NA 1 NA 1 1
8 NA NA 1 NA 1 NA 1 2
9 1 NA NA NA NA 1 NA 2
10 NA 1 NA NA NA NA NA 1
11 NA 1 NA 1 1 1 1 2
12 NA 1 NA NA NA NA 1 NA
13 NA 1 NA NA 1 1 NA 1
14 NA 1 NA NA 1 1 NA 1
15 NA NA NA NA NA NA NA 2
16 NA NA NA NA 1 1 1 2
17 NA NA 1 NA NA 1 1 2
18 1 1 NA NA NA NA NA 1
19 NA 1 NA 1 1 NA 1 1
20 NA 1 1 NA NA NA NA 1
21 NA NA NA 1 1 1 NA 2
[[2]]
Q1 Q2 Q3 Q4 Q5 Q6 Q7 region
2 1 1 1 NA 1 NA 1 2
5 NA 1 NA NA 1 NA 1 1
7 NA NA NA NA 1 NA 1 1
8 NA NA 1 NA 1 NA 1 2
11 NA 1 NA 1 1 1 1 2
13 NA 1 NA NA 1 1 NA 1
14 NA 1 NA NA 1 1 NA 1
16 NA NA NA NA 1 1 1 2
19 NA 1 NA 1 1 NA 1 1
21 NA NA NA 1 1 1 NA 2
[[3]]
Q1 Q2 Q3 Q4 Q5 Q6 Q7 region
1 1 1 1 1 NA 1 NA 1
3 NA 1 NA NA NA 1 1 1
6 NA NA NA NA NA 1 NA 2
9 1 NA NA NA NA 1 NA 2
11 NA 1 NA 1 1 1 1 2
13 NA 1 NA NA 1 1 NA 1
14 NA 1 NA NA 1 1 NA 1
16 NA NA NA NA 1 1 1 2
17 NA NA 1 NA NA 1 1 2
21 NA NA NA 1 1 1 NA 2