首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何传播计数数据

如何传播计数数据
EN

Stack Overflow用户
提问于 2021-08-06 08:09:37
回答 2查看 43关注 0票数 0

我有一个例子数据如下所示。

代码语言:javascript
复制
    site <- c("a", "b")
    RankA <- c("3","1")
    RankB <- c("1","3")
    RankC <- c("0","1")
  rawdata <- cbind(site, RankA, RankB, RankC)

我想像“新数据”那样进行转换。

代码语言:javascript
复制
    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)的评价数都被记录下来。例如,"site“有3票投RankA,1票投RankB,0票投RankC。我希望将这些数据转换为"newdata“,其中每个计算都是一行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-06 08:22:49

试试这个,使用dplyrtidyr

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-08-07 00:43:35

你可以使用uncounttidyr -

代码语言:javascript
复制
library(dplyr)
library(tidyr)

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

rawdata %>% pivot_longer(cols = -site) %>% uncount(value)

#  site  name 
#  <chr> <chr>
#1 a     RankA
#2 a     RankA
#3 a     RankA
#4 a     RankB
#5 b     RankA
#6 b     RankB
#7 b     RankB
#8 b     RankB
#9 b     RankC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68678277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档