首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展列和复制行

扩展列和复制行
EN

Stack Overflow用户
提问于 2019-07-26 11:42:07
回答 3查看 134关注 0票数 0

我不知道我对这个问题的称呼是否合理。我正在尝试编写一个代码,将计数替换为列的名称。例如,如果一个观察的计数为2,则该观察的Id为2,其列名称为2,而不是计数。下表显示了如果我的解释没有意义的话,我想要什么。

这是我的表(代码):

代码语言:javascript
复制
df <- structure(list(ID = c("P40", "P41", "P43"), 
                     Fruit = c(2, 2, 1),
                     Snack = c(2, 1, 1)),
                class = "data.frame", row.names = c(NA, -3L))

表:

代码语言:javascript
复制
ID    Fruit Snack
P40     2     2
P41     2     1
P43     1     1

This is what i want to achieve:
 ID  Items 
P40  Fruit    
P40  Fruit
P40  Snack
P40  Snack
P41  Fruit
P41  Fruit
P41  Snack
P43  Fruit         
P43  Snack
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-26 11:45:00

一种选择是gatheruncount

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

df %>%
  gather(key, value, -ID) %>%
  uncount(value)

#     ID   key
#1   P40 Fruit
#1.1 P40 Fruit
#2   P41 Fruit
#2.1 P41 Fruit
#3   P43 Fruit
#4   P40 Snack
#4.1 P40 Snack
#5   P41 Snack
#6   P43 Snack
票数 3
EN

Stack Overflow用户

发布于 2019-07-26 13:27:31

我们可以在base R中这样做,方法是对除第一个列之外的列进行unlist,然后使用列的值对行序列进行rep许可,以扩展数据。

代码语言:javascript
复制
df1 <- data.frame(ID = df[,1], Items = unlist(df[-1], use.names = FALSE))
df1[rep(seq_len(nrow(df1)), df1$Items),]
#.    ID Items
#1   P40     2
#1.1 P40     2
#2   P41     2
#2.1 P41     2
#3   P43     1
#4   P40     2
#4.1 P40     2
#5   P41     1
#6   P43     1
票数 0
EN

Stack Overflow用户

发布于 2019-07-26 13:43:46

一条单线:

代码语言:javascript
复制
library(reshape2)

dd <- data.frame(ID = rep(melt(df)$ID, melt(df)$value),
           Items = rep(melt(df)$variable,melt(df)$value)
           )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57219370

复制
相关文章

相似问题

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