【问题标题】:Transform columns to row without create "variable" and "value" [duplicate]将列转换为行而不创建“变量”和“值”[重复]
【发布时间】:2018-01-31 15:44:09
【问题描述】:

我见过很多类似但还不一样的转换示例。希望不要错。

我想改造这个 DF:

      Reference   Amount    Reference.2   Amount.2
1:   20171201     100,00 €    20171204    110,00 €

类似的事情:

     Reference   Amount
   1: 20171201   100,00 €
   2: 20171204   110,00 €

谢谢。

【问题讨论】:

  • 类似df <- rbind(DF[,1:2],DF[,3:4])
  • melt(dt, measure.vars = patterns("Reference", "Amount"), value.name = c("Reference", "Amount"))[, variable := NULL][](假设您使用的是“data.table”)。

标签: r transformation reshape reshape2 melt


【解决方案1】:

如果您真的只是处理成对的列并且您不想要“变量”或“值”列,那么也许您可以这样做:

matrix(c(t(df)), ncol = 2, byrow = TRUE)
##      [,1]       [,2]     
## [1,] "20171201" "100,00€"
## [2,] "20171204" "110,00€"
## [3,] "20171202" "101,00€"
## [4,] "20171205" "110,00€"

从那里,转换为 data.framedata.tabletbl 或任何你喜欢使用的......

但是,我不知道你为什么不这样做:

library(data.table)
melt(as.data.table(df), measure.vars = patterns("Reference", "Amount"), 
     value.name = c("Reference", "Amount"))[, variable := NULL][]
#    Reference  Amount
# 1:  20171201 100,00€
# 2:  20171202 101,00€
# 3:  20171204 110,00€
# 4:  20171205 110,00€

样本数据(来自@Florian 删除的答案):

df = read.table(text='Reference   Amount    Reference.2   Amount.2
1:   20171201     100,00€    20171204    110,00€
2:   20171202     101,00€    20171205    110,00€',header=T)

【讨论】:

  • FWIW,矩阵方法的缺点是所有列都被强制转换为相同的数据类型,在这种情况下为character。如果结果列需要保留它们各自的数据类型,带有多个 measure.vars 的melt() 是更好的选择。
猜你喜欢
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2018-09-07
  • 2014-10-30
相关资源
最近更新 更多