Я бы хотел вычислить функцию для нескольких столбцов информационного кадра со случайными значениями NA. У меня два вопроса:
- Как бороться с АН? Код запускается, когда я пробую его на столбцах без NA, но возвращает
NA
, когда есть NA, даже если я их удаляю.
- Как распечатать результаты в формате данных вместо нескольких массивов? Я использовал
mapply
, но, похоже, он неправильно выполняет вычисления.
Вот мой код:
#create a data frame with random NAs
df<-data.frame(category1 = sample(c(1:10),100,replace=TRUE),
category2 = sample(c(1:10),100,replace=TRUE)
)
insert_nas <- function(x) {
len <- length(x)
n <- sample(1:floor(0.2*len), 1)
i <- sample(1:len, n)
x[i] <- NA
x
}
df <- sapply(df, insert_nas) %>% as.data.frame()
df$type <- sample(c("A", "B", "C"),100,replace=TRUE)
#using apply:
library(NPS)
apply(df[,c('category1', 'category2')], 2,
function(x) df %>% filter(!is.na(x)) %>% group_by(type) %>%
transmute(nps(x)) %>% unique()
)
#results:
$category1
# A tibble: 3 x 2
# Groups: type [3]
type `nps(x)`
<chr> <dbl>
1 B NA
2 A NA
3 C NA
...
#using mapply
mapply(function(x) df %>% filter(!is.na(x)) %>% group_by(type) %>%
transmute(nps(x)) %>% unique(), df[,c('category1', 'category2')])
#results:
category1 category2
type Character,3 Character,3
nps(x) Numeric,3 Numeric,3
Что касается функции, которую я использую, она не имеет встроенного способа работы с NA, поэтому я удаляю NA до ее вызова.