【问题标题】:How to reshape dataframe with string variables?如何用字符串变量重塑数据框?
【发布时间】:2013-10-13 14:31:42
【问题描述】:

我有一个带有文本数据的数据框。它看起来像这样:

    var  texts users
1    1  text1 user1
2    2  text2 user1
3    3  text3 user1
4    4  text4 user1
5    5  text5 user1
6    1  text6 user2
7    2  text7 user2
8    3  text8 user2
9    4  text9 user2
10   5 text10 user2

现在我想重新组织这个数据框并使用 'var' 的值作为列名,并将数据框更改为具有两行(user1 和 user2)的数据框。 Text1 到 text10 是变量值。 我尝试了reshape2,但没有成功。

library(reshape2)
datafile.melt <- melt(data = datafile, id.vars=c('users','var'), measure.vars=c('texts'))
datafile.values <- dcast(datafile.melt, var ~ users)

结果是:

  var user1  user2
1   1 text1  text6
2   2 text2  text7
3   3 text3  text8
4   4 text4  text9
5   5 text5 text10

正如您所见,'user1' 和 'user2' 已更改为列名,而 var 值没有。我想把它改成:

 users     1     2     3     4      5
1 user1 text1 text2 text3 text4  text5
2 user2 text6 text7 text8 text9 text10

有人知道如何正确执行此操作吗? 非常感谢!

【问题讨论】:

  • 你试过users ~ var而不是var ~ users吗?
  • 就是这样!我以为我试过了,但我的代码有错误。如果您将此添加为答案,我将接受它。谢谢!

标签: r reshape


【解决方案1】:

使用来自基础 R 的reshape

nn<-reshape(df1,timevar="var",idvar="users",direction="wide")
    names(nn)[-1]<-as.character(unique(df1$var))
> nn
  users     1     2     3     4      5
1 user1 text1 text2 text3 text4  text5
6 user2 text6 text7 text8 text9 text10

【讨论】:

  • 对于它的价值,我不会重命名结果名称(尽管 OP 需要输出),至少有两个原因:(1)它们现在在语法上不再有效; (2) 由reshape 函数创建的用于方便地重新整形为长格式的属性现已丢失。在更改名称之前和之后尝试reshape(nn)(没有其他参数)以了解我的意思。也许这不是一个交易破坏者,但仍然......
  • @AnandaMahto:我明白你在说什么。感谢您的评论。
【解决方案2】:

根据我的评论,答案就是使用users ~ var 而不是var ~ users

> dcast(datafile.melt, users ~ var)
  users     1     2     3     4      5
1 user1 text1 text2 text3 text4  text5
2 user2 text6 text7 text8 text9 text10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2023-03-16
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多