#r #dataframe
Вопрос:
допустим, у меня есть следующий df
year score 2020 51 2020 10 2019 82 2019 73
и допустим, у меня есть следующая функция в R
sumOfNumbers lt;- function (sum){ firstNumber = with(df, sum(as.numeric(substring(df$score, 1, 1)))) secondNumber = with(df, sum(as.numeric(substring(df$score, 1, 1)))) return (c(firstNumber,secondNumber)) }
где функция возвращает сумму первых чисел (т. е. 5 1 8 2) и сумма вторых чисел (т. е. 1 0 2 3. Это вычисляется для всего df.
а теперь я хочу отфильтровать по годам
year2020 lt;- subset(df, year %in% "2020")
Но когда я пытаюсь ввести отфильтрованный df в функцию, я получаю ошибку (понятно, потому что функция предназначена для всего df). Как я могу использовать функцию, которая вычисляет сумму и отфильтрованный df?
результат -gt; для 2020 года первое число должно составлять 6, а второе число должно составлять 1
Комментарии:
1. Добавьте аргумент в функцию, чтобы вы могли передать ей произвольный кадр данных. Если вы сделаете аргумент фрейма данных первым аргументом функции, вы можете легко включить его в канал.
2. Я пытался это сделать. Я попытался использовать data.frame(сумма) в качестве аргумента, но это не сработало. Есть какие-нибудь мысли о том, как это исправить?
3. Измените подпись своей функции
function(df, sum)
на, а затем вызовите ее сsumOfNumbers(df %gt;% filter(Year== 2020))
помощью илиdf %gt;% filter(Year == 2020) %gt;% sumOfNumbers()
. Мне не ясно, как вы вызываете свою функцию, и цель вашегоsum
аргумента. Этотsum
аргумент может быть излишним.4. 1. Я думаю, что вы неправильно используете функцию substring () . Как он пишет, он берет первую цифру каждого числа в столбце. 2. Вам не нужно вызывать sum в качестве входных данных, это вызываемая функция внутри вашей. 3. Вам нужно добавить еще одно окончание), чтобы вернуться. Также вы должны указать df в качестве входных данных.
5. Здорово, что я догадался! Спасибо.