Как использовать циклы для автоматизации работы в R?

#r #loops

Вопрос:

У меня есть файл с данными о доставке товаров в магазин.Мне нужно рассчитать общее количество товаров в магазине. Я хочу использовать знания циклов для расчета общего количества товара в магазине, но мой цикл учитывает только общее количество последнего товара. Почему? Вот данные о доставке:

 "Day" "Cott.cheese, pcs." "Kefir, pcs." "Sour cream, pcs."
1         104           117               119
2          94           114               114
3         105           107               117
4          99           112               120
5          86           104               111
6          88           110               126
7          95           106               129
 

Я поместил эту таблицу в переменную in1
Вот код:

 s<-0 
  for (p in (2:ncol(in1))){   
     s<-sum(in1[,p]) } 
s
 

Ответ №1:

Не уверен, что я правильно понял ваш вопрос, но если вы хотите добавить только все значения вашего data.frame, кроме первого столбца (День), вам просто нужно это сделать:

 sum(in1[,-1])
 

Комментарии:

1. Я принес одну таблицу, и если у меня 10 таблиц, то все эти действия должны быть автоматизированы циклами. Ваш метод верен, но мне нужно немного другое

2. @sjr_25 поместите все свои фреймы данных в список, затем: lapply(myDataframes, sum)

Ответ №2:

Вы переписываете переменную s каждую итерацию, поэтому она показывает результат только для последнего столбца. Попробуйте

 s<-c()
for (p in 2:ncol(in1)) {
  s<-c(s,sum(in1[,p]))
}
 

альтернативно

 colSums(in1[,-1])
 

Комментарии:

1. Первый вариант не очень удобен, и если я хочу получить результат, то есть общее количество товаров, умноженное на некоторую переменную(их цену), и получить окончательный ответ, а не вектор значений

2. @sjr_25 Я не понимаю. Можете ли вы отредактировать свой вопрос с точным ожидаемым результатом? Каков ваш фактический желаемый результат?

3. @user2974951 Ваши методы дают вектор значений: 671 770 836 , но мне нужна сумма этих трех чисел, то есть одно конечное число: 2277. Я думаю, вам просто нужно использовать функцию sum