【问题标题】:Column names out of values using Tidyr列名超出使用 Tidyr 的值
【发布时间】:2017-02-28 15:52:58
【问题描述】:

我有以下数据框

df <- data.frame(event=c("A", "B", "C"), value=c(200,300,400))
df
  event value
1     A   200
2     B   300
3     C   400

想要得到

  event A_value B_value C_value
1     A     200      NA      NA
2     B      NA     300      NA
3     C      NA      NA     400

你有解决办法吗?

非常感谢。

(我试过 tidyr::spread 但不知道如何保留“事件”,也没有管理新列的正确命名。我需要保留“事件”,因为我需要进一步管道输出和再次使用“事件”。)

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    这是一个简单的解决方法:使用正确的列名创建一个附加列,然后使用它来传播数据:

    library(dplyr); library(tidyr)
    mutate(df, key = paste(event, "value", sep = "_")) %>% 
      spread(key, value)
    
    #  event A_value B_value C_value
    #1     A     200      NA      NA
    #2     B      NA     300      NA
    #3     C      NA      NA     400
    

    【讨论】:

    • 非常感谢。
    • 您现在如何删除“事件”列并折叠 NA 值?你明白我的意思吗?我尝试使用聚合并且它有效,但我看起来很难看。有没有更优雅的解决方案?谢谢
    • 我不明白你的意思
    • 在初始示例中:删除“事件”列。现在每一列中只有一个值。说这对我所有的情况都是正确的。因此,我只想保留这个值并“折叠”到一行。聚合不能“挑选”唯一的 notnan 值,可以吗? (对于聚合需要添加一个公共列,我猜)Thx
    • 您必须使用预期的输出更新您的问题。另请注意,这通常作为一个单独的问题会更好
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多