СУММА с тремя логическими условиями R (отредактировано) - PullRequest
0 голосов
/ 01 октября 2018

Прежде всего, я проверил существующие темы.К сожалению, они либо не совсем актуальны, либо я не могу их понять.Как вы знаете по моему типу вопроса, я ОЧЕНЬ плохо знаком с R. Я надеюсь, что это нормально ...

Я чувствую, что я на правильном пути ....

здесь https://i.stack.imgur.com/5jv0m.jpg - это фрагмент данных (df)

Я хочу сравнить, суммируют ли значения подкатегорий выбросов (y) значения, указанные в родительских категориях.Часть этого суммирует значения подкатегорий.

Короче говоря, я хочу знать, равна ли сумма (3.B.1 + 3.B.2 + ... + 3.Bn) = 3.B.(т. е. в указанной сумме csv) для данного года и страны.Я хочу проверить суммы.

Я пробовал этот код (с 2010 и Австрией):

sum(compare_df, x4 %in% c("1.A.1", "1.A.2", "1.A.3", "1.A.4", "1.A.5") & x 
== "2010" & x2 == "Austria")

, но получаю это:

Ошибка вFUN (X [[i]], ...): определяется только во фрейме данных со всеми числовыми переменными

После этого есть способ запустить код, который автоматизирует процесс выполнения кодадля других условий (например, список стран и лет)?Вам некоторые ключевые слова будут полезны здесь.Затем я мог бы найти его сам.

Я надеюсь, что мой вопрос достаточно ясен, и спасибо за любую помощь или предложение.Извините за столь длинный пост ...

PS: Я обновил все, знаю и надеюсь, мой вопрос более понятен.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Если вы хотите проверить суммы переменной y, вам нужно указать, какую переменную вы хотите суммировать.В настоящее время ваш оператор сумм пытается суммировать целые data.frame, и когда он встречает категориальную переменную, он выдает ошибку

Ошибка в FUN (X [[i]], ...): толькоопределены во фрейме данных со всеми числовыми переменными

Я не воспроизводил ваш код, но это можно проверить с помощью sum(iris).Если вы действительно хотите суммировать все числовые переменные, вы должны сделать это sum(iris[sapply(iris,is.numeric)]).

Но чтобы перейти к вашему вопросу о подмножестве трех переменных, вам нужно сделать что-то вроде этого:

sum(iris$Sepal.Length[iris$Species %in% c("setosa","versicolor") &
                        iris$Sepal.Width >= 3 &
                        iris$Petal.Length >= 2])

Сначала вы должны указать сумму, какую data.frame и переменную вы хотитенапример, сумма за (часть кода iris $ Sepal.Length - это будет ваш df$y), тогда с помощью [ вам нужно установить подмножество для переменных, представляющих интерес.В вашем коде, когда вы ссылаетесь на переменные без нотации df $, R не найдет эти переменные, потому что они не являются объектами, а являются частью data.frame.Надеюсь это поможет.

Также в вашем посте переменная года - это числовая, а не категориальная переменная, поэтому вы должны удалить кавычки около 2010 года.

0 голосов
/ 02 октября 2018

Трудно быть уверенным, не зная, как выглядит compare_df, но вот возможное решение с использованием dplyr, которое отлично подходит для работы с фреймами данных.

Оператор %>% - это «труба», которая берет результаты предыдущей функции и вставляет их в первый аргумент последующей функции.

Все функции dplyr (filter, group_by, summarize и т. Д.) Принимают данные в качестве первого аргумента функции, поэтому они прекрасно работают с %>%.

library(dplyr)

compare_df %>% 
     filter(x4 %in% c("1.A.1", "1.A.2", "1.A.3", "1.A.4", "1.A.5"))
     group_by(x, x2) %>% 
     summarize(sum_emmissions = sum(y, na.rm = TRUE)) %>% 
     filter(x == "2010", x2 == "Austria")
...