как использовать фрейм данных в качестве входных данных и управлять им на основе функции в R

#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. Здорово, что я догадался! Спасибо.