Есть ли функция R для выбора одной переменной из каждой группы (group_by ()) в кадре данных? - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть набор данных, в котором меня интересуют две переменные: trial и truth. Пробные номера вопросов, которые задавали людям (всего 20). И истина означает правильный ответ на каждый вопрос. Я хочу рассчитать log10() правды для каждого вопроса. Я придумал это:

logT <- data %>% 
    group_by(trial) %>% 
    unique(truth, incomparables = F) %>% 
    summarize(log10(truth))

Я не уверен, лучше ли работать с unique(), однако в небольшом синтаксис работает для меня.

trial truth
1   1   34
2   1   34
3   2   321
4   2   321
5   3   78
6   3   78

Но с исходными данными он продолжает повторять все строки, хотя они абсолютно одинаковы. Таким образом, я получаю 1600 г вместо 20, к которому я стремлюсь. Я использовал select() для работы только с соответствующими переменными перед запуском аргумента, но он все еще не работает.

Где я go не прав или есть лучший способ сделать это с нуля?

Ответы [ 3 ]

1 голос
/ 29 февраля 2020

A dplyr путь может быть

library(dplyr)

data %>%
  group_by(trial) %>%
  summarise(truth = first(log10(truth)))

Или, если логарифмы уже вычислены (маловероятно),

data %>%
  group_by(trial) %>%
  summarise(truth = first(truth))
1 голос
/ 29 февраля 2020

С dplyr мы также можем использовать distinct

library(dplyr)
distinct(data)
1 голос
/ 29 февраля 2020

Используйте unique(mydata) или distinct(mydata). Включая код log10, мы имеем:

mydata %>%
  distinct %>%
  mutate(truth = log10(truth))

Примечание

Вход mydata в воспроизводимом виде предполагается:

Lines <- "trial truth
1   1   34
2   1   34
3   2   321
4   2   321
5   3   78
6   3   78"
mydata <- read.table(text = Lines)
...