#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