【问题标题】:How to transform (standardize) data within categories in a single data frame in R?如何在 R 中的单个数据框中转换(标准化)类别内的数据?
【发布时间】:2021-02-20 09:59:16
【问题描述】:

我只需要在某些类别内缩放值。本质上,我有一个包含个人、年份和几个预测变量的 data.frame。

Individual Year Uplift
A 2013 0.76280999
A 2013 1.01930776
A 2015 0.00000000
B 2011 0.78427964
B 2013 0.00000000
B 2013 1.37627043

我需要在每个人和年份中扩展我的预测变量,换句话说,将 2013 年的个人 A 年、2015 年的个人 A 年等标准化为 33 个人和 86000 行。不希望在每个人和年份组合的单独数据框中执行此操作,我尝试使用 dplyr 解决方案

library("dplyr")

data %>%

group_by(Individual, Year) %>%

mutate(data, std_uplift= scale(uplift) %>%

ungroup()))

这自然会引发错误:

错误:mutate() 输入有问题 ..1

x 输入 ..1 无法回收到大小 1100。

我输入..1data

i 输入 ..1 的大小必须为 1100 或 1,而不是 83670。

i 错误发生在第 1 组中:Individual = "A", year = "2013"。

我不明白如何修复该错误,因为它似乎试图将所有个人的数据推送到一个组中,但我猜测有更好的方法来扩展给定类别的数据。我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:
    library("dplyr")
    df <- tribble(
      ~Individual,  ~Year,  ~Uplift,
    "A", 2013, 0.76280999, 
    "A", 2013, 1.01930776, 
    "A", 2015, 0.00000000, 
    "B", 2011, 0.78427964, 
    "B", 2013, 0.00000000, 
    "B", 2013, 1.37627043)
    
    df %>% 
      mutate(std_Uplift = as.numeric(scale(Uplift))) %>% 
      ungroup()
    
    # A tibble: 6 x 4
      Individual  Year Uplift std_Uplift[,1]
      <chr>      <dbl>  <dbl>          <dbl>
    1 A           2013  0.763          0.190
    2 A           2013  1.02           0.653
    3 A           2015  0             -1.18 
    4 B           2011  0.784          0.229
    5 B           2013  0             -1.18 
    6 B           2013  1.38           1.30 
    

    【讨论】:

    • scale 返回一个matrix,这可能是列名具有[,1] 的原因。也许你可以用as.numeric(scale
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2015-08-31
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多