我有一个例子数据如下所示。
site <- c("a", "b")
RankA <- c("3","1")
RankB <- c("1","3")
RankC <- c("0","1")
rawdata <- cbind(site, RankA, RankB, RankC)我想像“新数据”那样进行转换。
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“,其中每个计算都是一行。
发布于 2021-08-06 08:22:49
试试这个,使用dplyr和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发布于 2021-08-07 00:43:35
你可以使用uncount从tidyr -
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 RankChttps://stackoverflow.com/questions/68678277
复制相似问题