【问题标题】:Is there an R function to select one variable from each group (group_by()) from the dataframe?是否有一个 R 函数可以从数据框中的每个组(group_by())中选择一个变量?
【发布时间】:2020-02-29 16:42:39
【问题描述】:

我有一个数据集,其中有两个变量让我感兴趣:trialtruth。试验数字人们被问到的问题(总共 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个obs。而不是我的目标是 20 个。 在运行参数之前,我使用select() 仅使用相关变量,但它仍然不起作用。

我哪里出错了,或者有没有更好的从头开始的方法?

【问题讨论】:

  • truth 的值是日志吗?

标签: dataframe r dplyr data-manipulation


【解决方案1】:

dplyr 方式可能是

library(dplyr)

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

或者,如果已经计算了对数(不太可能),

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

【讨论】:

    【解决方案2】:

    使用dplyr,我们也可以使用distinct

    library(dplyr)
    distinct(data)
    

    【讨论】:

      【解决方案3】:

      使用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)
      

      【讨论】:

      • 计算日志:unique(data) %&gt;% mutate(truth = log10(truth))。无需按trial分组。
      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多