【问题标题】:Reordering variables using the mean value of a separate column in r使用 r 中单独列的平均值重新排序变量
【发布时间】:2021-05-23 16:12:50
【问题描述】:

我有一个表单数据集

  regional.indicator ladder.score
1 A                   100
2 A                   200
3 B                   30
4 B                   40
5 C                   50

我试图在名为regional.indicator 的因子中按平均ladder.score 对变量重新排序,并将这个新向量分配给order1(similar to this)。我的问题是代码回复regional.indicator不存在的错误。

示例

library(dplyr)

# Create dataset
 df <- data.frame(regional.indicator = c("A","A","B","B","C"),
             ladder.score = c(100,200, 30,40,50))
             
# Change regional.indicator to factor
df$regional.indicator <- as.factor(df$regional.indicator)

# Function where the error arises
order1 <- df %>%  
           group_by(regional.indicator)%>%
           summarise(Laddermean = mean(ladder.score))%>%
           arrange(Laddermean)%>%
           pull(regional.indicator)

出现的错误消息:

Error: Can't extract columns that don't exist.
x Column `regional.indicator` doesn't exist.
Run `rlang::last_error()` to see where the error occurred.

我怎样才能摆脱这个错误或以不同的方式做到这一点?也许使用forcats

【问题讨论】:

  • 代码看起来应该可以工作,但是当我在我的计算机上尝试时遇到同样的错误。
  • 我喜欢df$order1 = forcats::fct_reorder(df$regional.indicator, df$ladder.score, mean)的语法
  • @JonSpring,这会完全一样吗?
  • 我不确定我是否正确理解了您的目标。我建议的行将在您的df 中创建一个名为order1 的新变量,这是您的regional.indicator 作为基于ladder.score 平均值的有序因子。
  • @JonSpring 这不适用于我的情况,因为它会打印出所有值,我需要有顺序以便我可以将其用作精确的顺序向量,例如 c("A", “C”、“B”)。原因是我随后会进一步操纵它。

标签: r dataframe dplyr tidyverse


【解决方案1】:

如果你还没有解决你的问题 -> 然后这样做:

只需将dplyr:: 添加到summarise。我猜 dplyr 的 summarise 会干扰您系统上的 plyr 包:

替换:

summarise(Laddermean = mean(ladder.score))%&gt;%

dplyr::summarise(Laddermean = mean(ladder.score))%&gt;%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多