【问题标题】:How to split 1 row into multiple rows where columns hold same value types如何将 1 行拆分为多行,其中列包含相同的值类型
【发布时间】:2021-05-05 14:03:15
【问题描述】:

我有一个广泛的数据集,这使得以我需要的方式操作数据变得非常困难。它看起来像下面的虚拟表:

Dummy_table_unsorted

本质上,如表所示,1 行中保存的信息是用户级别的,您有一个用户 ID,然后每个用户拥有的所有动物都在该行中。我想要什么,我想要动物级别的,这样用户就可以有多个条目,代表他们每个不同的动物。我在下面粘贴了一张我希望它看起来像的表格:

Dummy_table_sorted

有没有简单的方法来做到这一点?我有一个想法,但它很冗长。我想可能只通过与一种动物相关的选定列进行子集化,然后将数据集重新合并在一起。问题是,在 5 月份的数据中,一个人可能拥有多达 100 只动物,这使得这个过程非常冗长。

请有人提供建议或软件包/命令,让我可以将这个宽数据集更改为长数据集吗?

谢谢。

【问题讨论】:

  • 能否将您的样本数据和结果数据分享为代码或dput。无法将图像复制并粘贴到编辑器中以重现问题。 - 如果社区可以使用数据集而不是图像来复制您的问题,则更有可能得到答案。

标签: r dataframe data-wrangling


【解决方案1】:

首先,您应该提供人们可以轻松插入到 R 中的数据。屏幕截图没有帮助,而且会增加人们为帮助您而需要执行的工作量。

您拥有的数据应该能够被拆分,并与bind_rowsrbind 重新组合。我会将数据子集为三个数据框,重命名列并绑定。假设您的原始数据称为df

df1 <- df[,c(1:4)]

df2 <- df[,c(1,5:7)]

df3 <- df[,c(1,8:10)]

# rename columns to match
names(df1) <- c('user id', 'animal', 'colour', 'legs')
names(df2) <- c('user id', 'animal', 'colour', 'legs')
names(df3) <- c('user id', 'animal', 'colour', 'legs')

remade <- bind_rows(df1, df2) %>%
  bind_rows(df3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多