【问题标题】:R Studio Cast/Melt on a data.frameR Studio Cast/Melt 在 data.frame 上
【发布时间】:2020-10-09 00:54:24
【问题描述】:

我一直在尝试不同的方法来实现这一点,但我失败了。我觉得这很简单,我不确定我错过了什么......我正在尝试在下面转换这个数据框:

进入

我认为我需要先融化,然后施放,尽管我似乎无法让它发挥作用。

mydata <- melt(df, id.vars = "Company", measure.vars = "Product")
mydata2 <- cast(mydata, "Company" ~ "Product")

【问题讨论】:

    标签: r reshape2


    【解决方案1】:

    在基数 r 中执行此操作的一种肮脏方法是将每个公司的销售额循环转置并转换回 data.frame。

    lst = list()
    i <- 1
    for (name in unique(df$Company)){
      lst[[i]] <- data.frame(t(df[df$Company == name, 'Sales']))
      i <- i + 1
    }
    
    out <- cbind(unique(df$Company), Reduce(rbind, lst))
    colnames(out) <- c(colnames(df)[1], unique(df$Product))
    out
    

    编辑:这是一个包装上一个答案的函数。

    convwide <- function(data, by, datcol, namcol){
        lst = list()
        i <- 1
        for (name in unique(df[[by]])){
          lst[[i]] <- data.frame(t(df[df[[by]] == name, datcol]))
          i <- i + 1
        }
    
        out <- cbind(unique(df[[by]]), Reduce(rbind, lst))
        colnames(out) <- c(by, unique(df[[namcol]]))
       return(out)
        }
    convwide(df, 'Company', 'Sales', 'Product')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2016-05-03
      • 2018-04-02
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多