【问题标题】:How to convert a list of attributes to a table? [duplicate]如何将属性列表转换为表格? [复制]
【发布时间】:2019-06-02 13:52:00
【问题描述】:

我有一个很大的属性列表,我想将它们转换成一个表格。

我看起来像这样:

name  Key  Value
1     age   20
1     sex   1
2     age   20
2     sex   0
3     age   22
4     age   30
5     age   29
6     age   6

我想把它转换成这样的:

name  age  sex
1     20    1
2     20    0
3     22
4     30
5     29
6     6

有人有想法吗?

#

编辑 我的原始列表有更多的值,而不仅仅是 2。我看到的所有答案都没有回答我的问题。 我会尝试用更小的表更好地解释它。

我的桌子:

name  key    value
1     first   0
2     first   1
2     sec     1
1     sec     2
1     tr      1
2     tr      0
3     first   0
3     sec     0
4     first   0    

想要的结果:

name first sec tr
1      0    2   1
2      1    1   0
3      0    0
4      0

【问题讨论】:

  • 看看tidyr::spread
  • 只是一个旁注。 Attribute 可以作为 R 中的“特殊词”。因此,最好谨慎使用(在我看来)。
  • tidyr::spread(df, key, value)tidyr::spread(df, key, value, fill = 0)tidyr::spread(df, key, value, fill = "") 取决于您希望如何 fill 空值。

标签: r dataframe tidyr


【解决方案1】:

这是一个使用来自 OP 的数据和tidyr::spread() 的示例。

rawData <- "name,Key,Value
1,age,20
1,sex,1
2,age,20
2,sex,0
3,age,22
4,age,30
5,age,29
6,age,6"

df <- read.csv(text=rawData,header=TRUE,stringsAsFactors=FALSE)

library(tidyr)

df %>% spread(.,key=Key,value=Value)

...和输出:

> df %>% spread(.,key=Key,value=Value)
  name age sex
1    1  20   1
2    2  20   0
3    3  22  NA
4    4  30  NA
5    5  29  NA
6    6   6  NA
> 

有关spread() 及其补充gather() 的更多背景信息,请参阅R for Data Science, Chapter 12: Tidy Data

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 2019-12-12
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多