R_将原始数据转换为列数据
我有一个数据帧dfR_将原始数据转换为列数据,r,transform,R,Transform,我有一个数据帧df > df<-data.frame(a=letters[1:5], b=1:5, c=LETTERS[1:5]) > df a b c 1 a 1 A 2 b 2 B 3 c 3 C 4 d 4 D 5 e 5 E 我尝试了以下方法 > df1<-data.frame(c(df[1,],df[2,],df[3,])) > df1 a b c a.1 b.1 c.1 a.2 b.2 c.2 1 a 1 A
> df<-data.frame(a=letters[1:5], b=1:5, c=LETTERS[1:5])
> df
a b c
1 a 1 A
2 b 2 B
3 c 3 C
4 d 4 D
5 e 5 E
我尝试了以下方法
> df1<-data.frame(c(df[1,],df[2,],df[3,]))
> df1
a b c a.1 b.1 c.1 a.2 b.2 c.2
1 a 1 A b 2 B c 3 C
>df1 df1
a b c a.1 b.1 c.1 a.2 b.2 c.2
1 a 1 b 2 b c 3 c
但结果是行矩阵,在现实中,我有数百列和行,它们应该转换为一列。我怎么做
> data.frame(a = matrix(apply(df, 1, c), ncol = 1))
## a
## 1 a
## 2 1
## 3 A
## 4 b
## 5 2
## 6 B
## 7 c
## 8 3
## 9 C
## 10 d
## 11 4
## 12 D
## 13 e
## 14 5
## 15 E
这里还有另外两个选择
> data.frame(a = do.call(rbind, as.list(t(df))))
## or
> data.frame(a = c(apply(df, 1, c)))
as.vector
和as.matrix
也将代替上面的apply
调用中的c
这里还有另外两个选择
> data.frame(a = do.call(rbind, as.list(t(df))))
## or
> data.frame(a = c(apply(df, 1, c)))
as.vector
和as.matrix
也将在上面的apply
调用中替代c
。使用t(df)
而不是apply(df,1,c)
,速度稍微快一些。我想知道是否使用数据。table
会更快一些。。。类似于库(data.table);data.frame(a=matrix(data.table(df)[,t(.SD)],ncol=1))
您应该在大数据集上对其进行基准测试谢谢@Richard Scriven和@shadow。这两个函数都很好。@richardscriven在中被c
调用的函数如何应用(df,1,c)
工作?它连接了一个向量。你也可以用as.vector
或as.matrix
代替apply(df,1,c)
,用t(df)
稍微快一点。我不知道用data.table
会不会快一点。。。类似于库(data.table);data.frame(a=matrix(data.table(df)[,t(.SD)],ncol=1))
您应该在大数据集上对其进行基准测试谢谢@Richard Scriven和@shadow。这两个函数都很好。@richardscriven在中被c
调用的函数如何应用(df,1,c)
工作?它连接了一个向量。您也可以在那里使用as.vector
或as.matrix
。