#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть небольшой R dataframe, который можно воспроизвести из кода ниже
structure(list(Replicate_No = 1:6, `1` = c(60.7, 60.83, 60.12,
60.66, 60.51, 60.53), `2` = c(60.74, 60.9, 60.41, 60.7, 60.62,
60.71), `3` = c(60.71, 60.65, 60.79, 60.75, 60.82, 60.82), `4` = c(60.7,
60.7, 60.7, 60.6, 60.8, 61), `6` = c(60.704, 60.496, 60.742,
60.831, 60.955, 60.698), `7` = c(60.74, 61.29, 60.68, 60.55,
61.26, 60.46), `8` = c(60.89, 61.21, 61.04, 61.28, 61.05, 61.15
), `9` = c(60.67, 60.47, 60.74, 60.96, 60.58, 60.79)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
значение 60.1 во 2-м столбце является выбросом, определенным из теста grubs. Я присвоил значение выброса grb.out. Я хочу выполнить подсчет столбцов, но исключить это значение из подсчета. Я изначально преобразовал значение выброса в NA и получил следующий код, который дал мне желаемый результат.
df.count <- colSums(!is.na(df[, 2:length(df)]))
мой вопрос в том, как я могу использовать colSums или аналогичную другую функцию, чтобы не учитывать значения выбросов, а также игнорировать NA. Я хотел бы игнорировать NAs, а также время от времени у меня будут значения NA, но по разным причинам.
В качестве отправной точки попробовали
df.count <- colSums(!= grb.out(df[, 2:length(df)]))
df.count <- colSums(!= 60.1 (df[, 2:length(df)]))
Я получаю сообщение об ошибке «неожиданно «!=» в df.count …
Любые советы были бы замечательными, советы или указания были бы замечательными.
Ответ №1:
Вы можете попробовать следующее с sapply
:
df.count <- sapply(round(df[-1], 1) function(x)
sum(!(x %in% grb.out | is.na(x))))
Или с dplyr
:
library(dplyr)
round(df, 1) %>% summarise(across(-1, ~sum(!(. %in% grb.out | is.na(.)))))
Комментарии:
1. спасибо, ваше первое решение работает. Я уже пробовал второе решение.
Ответ №2:
Предположим, что grb.out
это a data.frame
тех же размеров, что и ваш df
. Попробуйте это:
df.count <- colSums(df[, 2:length(df)] != grb.out)
df.count <- colSums(df[, 2:length(df)] != 60.1)
If grb.out
— функция, которая принимает a data.frame
в качестве своего первого аргумента, затем
df.count <- colSums(df[, 2:length(df)] != grb.out(df[, 2:length(df)]))
Комментарии:
1. спасибо, ваши первые два решения отвечают на часть моего вопроса. Я также хотел бы объединить NA в код. В этом примере grb.out является единственным значением, которое = 60.1. У меня могут быть случаи, когда у меня есть несколько значений выбросов, которые необходимо учитывать, которые я бы, вероятно, сохранил как вектор