【问题标题】:Reshape a data frame to matrix from text file value.var errors从文本文件 value.var 错误将数据框重塑为矩阵
【发布时间】:2015-09-07 18:51:53
【问题描述】:

我有一个与这里非常相似的问题:Reshape three column data frame to matrix ("long" to "wide" format)

除非我从文本文件中获取数据,并且我正在尝试使用 reshape2 库和 dcast 方法

这是我的文本文件:

'Group','LiteracyLevel','Frequency'
'Shifting','Illerate',114
'Shifting','Primary',10
'Shifting','AtLeastMiddle',45
'Settled','Illerate',76
'Settled','Primary',2
'Settled','AtLeastMiddle',53
'Town','Illerate',93
'Town','Primary',13
'Town','AtLeastMiddle',208

应该改成这种格式,因为我想在上面使用barplot(as.matrix(data))

'Group','Illerate','Primary','AtLeastMiddle'
'Shifting',114,10,45
'Settled',76,2,53
'Town',93,13,208

我不知道为 dcast 的 value.var 部分输入什么。我假设它的频率。我目前重塑数据的尝试如下所示:

> data <- read.csv("ex3-39.txt", header=TRUE)

> dcast(data, data$Group~data$LiteracyLevel, value.var="X.Frequency")
Error: value.var (X.Frequency) not found in input

> dcast(data, data$Group~data$LiteracyLevel, value.var="Frequency")
Error: value.var (Frequency) not found in input

> dcast(data, data$Group~data$LiteracyLevel, value.var="data$X.Frequency")
Error: value.var (data$X.Frequency) not found in input

> dcast(data, data$Group~data$LiteracyLevel, value.var=data$X.Frequency)
Error: value.var (1141045762539313208) not found in input
In addition: Warning message:
In if (!(value.var %in% names(data))) { :
  the condition has length > 1 and only the first element will be used

> dcast(data, data$Group~data$LiteracyLevel, value.var=Frequency)
Error in match(x, table, nomatch = 0L) : object 'Frequency' not found

【问题讨论】:

  • 也许您的数据看起来不像您期望的那样(请提供dput(data) 的输出)如果您在 dcast 中有一个数据框,您可以在您的打电话给decast。 dcast(data, Group~LiteracyLevel, value.var="Frequency")

标签: r matrix dataframe reshape2


【解决方案1】:

这有帮助吗

library(reshape2)
data<-read.csv("filename.csv",quote = "'")
dcast(data, data$Group~data$LiteracyLevel, value.var="Frequency")

这将输出为

  data$Group AtLeastMiddle Illerate Primary
1    Settled            53       76       2
2   Shifting            45      114      10
3       Town           208       93      13

我认为您错过了quote="'" 参数并且您的列名的格式为

"X.Group." "X.LiteracyLevel." "X.Frequency."

如果您不想使用quote="'" 参数,请使用:

dcast(data, data$X.Group.~data$X.LiteracyLevel., value.var="X.Frequency.")

这将给出输出

  data$X.Group. 'AtLeastMiddle' 'Illerate' 'Primary'
1     'Settled'              53         76         2
2    'Shifting'              45        114        10
3        'Town'             208         93        13

这是为了好玩。要在此代码之后创建一个漂亮的条形图,请不要投射整个矩阵。您应该将第一列作为图例

final_data 包含重构后的数据。对于矩阵跳过第一列并将其用作图例。

barplot(as.matrix(final_data[,2:4]),legend=final_data$"data$Group")

这将给出一个很好的图表

【讨论】:

  • 我正在使用 barplot(as.matrix(final_data[,2:4]),legend=final_data$"data$Group") 但生成的图表没有为我显示图例。
  • 但是图表的其余部分和我的一样吗?
  • 是的,图表的其余部分是你的。
  • 尝试使用自定义图例,看看是否可行。这将澄清数据或绘图是否有问题。 barplot(as.matrix(final_data[,2:4]),legend=c("Settled","Shifting","Town"))
  • 自定义图例有效!为什么自定义图例有效而第一个图例无效?
【解决方案2】:
# Just to make sure we're dealing with the same data...
df <- read.csv(quote="'",text="'Group','LiteracyLevel','Frequency'
'Shifting','Illerate',114
'Shifting','Primary',10
'Shifting','AtLeastMiddle',45
'Settled','Illerate',76
'Settled','Primary',2
'Settled','AtLeastMiddle',53
'Town','Illerate',93
'Town','Primary',13
'Town','AtLeastMiddle',208")
df
#                     Group LiteracyLevel Frequency
# 1                Shifting      Illerate       114
# 2                Shifting       Primary        10
# 3                Shifting AtLeastMiddle        45
# 4                 Settled      Illerate        76
# 5                 Settled       Primary         2
# 6                 Settled AtLeastMiddle        53
# 7                    Town      Illerate        93
# 8                    Town       Primary        13
# 9                    Town AtLeastMiddle       208

library(reshape2)
dcast(df, Group~LiteracyLevel)
#                     Group AtLeastMiddle Illerate Primary
# 1                 Settled            53       76       2
# 2                Shifting            45       NA      NA
# 3                    Town           208       93      13
# 4                Shifting            NA      114      10

问题是您需要在公式中指定列名(引用data),而不是列。当您像以前一样指定列时,例如df$Group 结果向量未命名

names(df)
# [1] "Group"         "LiteracyLevel" "Frequency"    
names(df$Group)
# NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多