【问题标题】:Error with tidyr when converting rows to columns [duplicate]将行转换为列时 tidyr 出错 [重复]
【发布时间】:2020-08-07 10:05:54
【问题描述】:

我想将行转换为列以返回每种模式的平均成本。我正在尝试使用 pivot_wider 函数,但它给出了以下错误。 错误:此 tidyselect 接口尚不支持谓词。 i 联系包作者并建议使用eval_select()

我尝试更新软件包,但问题仍然存在。除了 pivot_wider 之外,还有什么其他的方法可以得到想要的结果? 我的数据框prcostdata看起来像这样。

S447.1               cost
Car                  100
Government Ambulance 50
Jeep                 600
Scooter              800
Government Ambulance 100
Car                  200
Jeep                 1500
Scooter              750

期望的输出。

Government Ambulance  Car  Jeep  Scooter
75                    150  1050  775

这是我的代码。

library(dplyr)
library(tidyr)
trans <- c("Government Ambulance","Car","Jeep","Scooter")
prcostmode<-prcostdata %>% 
  arrange(match(S447.1, trans)) %>%
  pivot_wider(names_from = S447.1, values_from = mean)

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    像这样使用tidyr

    df %>%
      pivot_wider(names_from="S447.1", values_from="cost", values_fn=mean)
    

    返回

    # A tibble: 1 x 4
        Car Government_Ambulance  Jeep Scooter
      <dbl>                <dbl> <dbl>   <dbl>
    1   150                   75  1050     775
    

    数据

    structure(list(S447.1 = c("Car", "Government_Ambulance", "Jeep", 
    "Scooter", "Government_Ambulance", "Car", "Jeep", "Scooter"), 
        cost = c(100, 50, 600, 800, 100, 200, 1500, 750)), class = c("spec_tbl_df", 
    "tbl_df", "tbl", "data.frame"), row.names = c(NA, -8L), spec = structure(list(
        cols = list(S447.1 = structure(list(), class = c("collector_character", 
        "collector")), cost = structure(list(), class = c("collector_double", 
        "collector"))), default = structure(list(), class = c("collector_guess", 
        "collector")), skip = 1), class = "col_spec"))
    

    【讨论】:

    • 我收到以下错误。 values_fn[[value]] 中的错误:“闭包”类型的对象不是子集。
    • 您使用的是哪个版本的tidyr?也许你必须更新你的包。
    【解决方案2】:

    Data.table 解决方案:

    setDT(df)
    dcast(df, .~S447.1, fun = mean, value.var = "cost")
    

    【讨论】:

    • 不错,但sum 应该是mean
    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 2012-08-21
    • 1970-01-01
    • 2015-08-06
    • 2013-10-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多