R 将列转换为行而不创建;变量";及;“价值”;

R 将列转换为行而不创建;变量";及;“价值”;,r,transformation,reshape,reshape2,melt,R,Transformation,Reshape,Reshape2,Melt,我见过很多类似的转换示例,但还不尽相同。希望不要错 我想将此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转换为:

      Reference   Amount    Reference.2   Amount.2
1:   20171201     100,00 €    20171204    110,00 €
对这样的事情:

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

谢谢。

如果您只是处理成对的列,而不需要“变量”或“值”列,那么您可以只执行以下操作:

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.frame
data.table
tbl
或您喜欢使用的任何内容

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

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删除的答案):


Smthg类似于
df
melt(dt,measure.vars=patterns(“Reference”,“Amount”),value.name=c(“Reference”,“Amount”)[,variable:=NULL][
(假设您使用的是“data.table”)。FWIW,矩阵方法的缺点是所有列都强制为相同的数据类型,在这种情况下为
字符。如果结果列需要保留其各自的数据类型,则使用multiple measure.vars的
melt()
是更好的选择。
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)