【问题标题】:Spreading to make tall data wide not by collapsing rows into columns通过将行折叠成列来扩展以使数据变宽
【发布时间】:2019-04-23 20:06:07
【问题描述】:

我试图通过将多个列合并到一个 ID 上来将一个高大的数据集变宽。

我一直在使用spread,但目前我只得到spread 创建的列,但仍然有与以前相同数量的行。 我目前有:

  ID Code_Type Code
   1   10        4
   1    9        5 
   2    10       6
   2    9        7

我想要:

ID  Code_Type_10  Code_type_9
1       4              5
2       6              7

这是我当前的代码

t <- spread(df, Code_Type, Code)

但是,当我这样做时,它会创建列但不会压缩行。

【问题讨论】:

  • 不确定“它创建列但不压缩行”是什么意思。将sep = "_" 添加到spread 调用后,我得到了似乎是您的输出
  • 所以发生的事情是我在数据框的末尾得到两列,它们是 Code_type 列,但数据仍然很高
  • 您应该确保您的数据在此示例中正确表示。 spread(df, Code_Type, Code, sep = "_") 完全为我获取您的输出,但这可能是由于存在更多列

标签: r tidyr


【解决方案1】:

在 MDEWITT 的条目中添加一点

df <- data.frame("ID" = c(1,1,2,2), 
                 "Code_Type" = c(10,9,10,9), 
                 "Code" = c(4,5,6,7))

t <- tidyr::spread(df, Code_Type, Code)
names(t)[c(2,3)] <- paste0(rep("Code_Type_", 2), names(t)[c(2,3)])

df %>% 
  mutate(Code_Type = paste0("Code_Type_", Code_Type)) %>% 
  spread(Code_Type, Code)

> t
  ID Code_Type_9 Code_Type_10
1  1           5            4
2  2           7            6

【讨论】:

    【解决方案2】:

    这是你的想法吗?

    df %>% 
      mutate(Code_Type = paste0("Code_Type_", Code_Type)) %>% 
      spread(Code_Type, Code)
    

    我认为您只需要添加 mutate 步骤即可使其工作。

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多