首页 > 解决方案 > 如何传播计数数据

问题描述

我有一个如下示例数据。

    site <- c("a", "b")
    RankA <- c("3","1")
    RankB <- c("1","3")
    RankC <- c("0","1")
  rawdata <- cbind(site, RankA, RankB, RankC)

我想像“newdata”一样进行转换。

    site <- c("a","a","a","a", "b","b","b","b","b")
    Rank <- c("A","A","A","B","A","B","B","B","C")
  newdata<- cbind(site,Rank)

谢谢,

#编辑

rawdata 是关于该站点的评估调查的结果。对于每个站点,记录每个等级(A 到 C)的评价次数。例如,“站点 a”对 RankA 有 3 票,对 RankB 有 1 票,对 RankC 有 0 票。我想将此数据转换为“newdata”,其中每个评估都是一行。

标签: rdplyr

解决方案


试试这个,使用dplyrand tidyr

site <- c("a", "b")
RankA <- c("3","1")
RankB <- c("1","3")
RankC <- c("0","1")
df <- data.frame(site, A = RankA, B = RankB, C = RankC)

df <- tidyr::pivot_longer(df, cols = 2:4, values_to = 'rep', names_to = 'rank')

df <- df[rep(1:nrow(df), df$rep),] %>%
  select(-rep)

df

推荐阅读