Как подмножить и суммировать столбец в R в одной строке кода

#r #subset

#r #подмножество

Вопрос:

Мне интересно, как объединить подмножество моих данных и суммирование столбца в пределах этого подмножества данных в одной строке. Я могу легко сделать это в два раза, но у меня так много фреймов данных для этого, поэтому я хочу свести к минимуму копирование / вставку / небольшое редактирование для каждого набора данных.

Вот две строки кода, которые, я знаю, я могу сделать:

 sumE_df201 = subset(df201, t>=55)
test = sum(sumE_df201)$e
 

Я попытался объединить их в один как таковой и получил следующую ошибку:

 sumE_df201 = sum(subset(df201, t>=55))$e
>Error in sum(subset(df201, t >= 55))$e : 
  >$ operator is invalid for atomic vectors
 

Если у кого-нибудь есть представление о том, как это сделать правильно, я был бы признателен. Я уверен, что в конце концов, выполнение двух строк и копирование их для всех фреймов данных заняло бы меньше времени (я редактирую их с помощью ctrl f и заменяю, когда могу, но все же). Но я пытаюсь улучшить свою грамотность в R.

Пример / ненужные данные здесь:

 t= 1:121
e= rnorm(t, mean=t, sd=1)
junk1 = 301:421
junk2 = 501:621
df201 = cbind(t, e, junk1, junk2)
 

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

1. Как насчет sum(subset(df201, t>=55)[, "e"])

2. Ага! Это так. Знаете ли вы, почему индексация таким образом, но не по $ work? Также, если вы сделаете это официальным ответом, я выберу его, ха-ха

Ответ №1:

Причина, по которой $ это не работает, заключается в том, что subset(df201, t>=55) это атомарный вектор, и вы можете увидеть дополнительную помощь ?"$" .

Один из способов — использовать индексацию

 sum(subset(df201, t>=55)[, "e"]).
# 5897.988
 

Другой способ — преобразовать его во фрейм данных, а затем использовать $

 sum(as.data.frame(subset(df201, t>=55))$e)
# 5897.988
 

Ответ №2:

Опция с dplyr

 library(dplyr)
df201 %>%
       filter(t >= 55) %>%
       pull(e) %>%
       sum