R - 将多行连接成一个彼此相邻的行

时间:2016-03-14 14:25:31

标签: r excel split concatenation

我有一个包含3列和多行的数据框。我想分割数据帧,以便只有一行,并且值是顺序的(所以基本上是一行csv)。

我的数据框如下所示:

  **Subject    Module        ID**
    History    WW2           1
    English    Literature    2
    Maths      Algebra       3

我想要实现的是一行,它将按此顺序显示:

 History,    WW2,     1,     English,     Literature,    2,     Maths,    Algebra,    3 

我可以使用excel进行剪切和粘贴,但是想知道R是否有快速方法。

任何帮助都会很棒! 感谢。

3 个答案:

答案 0 :(得分:5)

pastecollapse一起使用即可。 unlist会在您的数据框架中创建一个向量,但它会按列进行,因此您需要t来先转置它。

df <- read.table(textConnection("Subject    Module        ID
    History    WW2           1
                                English    Literature    2
                                Maths      Algebra       3"),
                 stringsAsFactors=FALSE, header=TRUE)
> paste(unlist(t(df)), collapse=",")
[1] "History,WW2,1,English,Literature,2,Maths,Algebra,3"

已编辑,可在评论中添加您要求的数据框版本...

df1 <- read.csv(text=paste(unlist(t(df)), collapse=","), header=FALSE,
                stringsAsFactors=FALSE)
names(df1) <- rep(names(df), nrow(df))
> df1
  Subject Module ID Subject     Module ID Subject  Module ID
1 History    WW2  1 English Literature  2   Maths Algebra  3

这会产生非唯一的列名,这是不可取的。

答案 1 :(得分:1)

data<-data.frame(A=c(1:3),B=6:8,C=9:11)
data
#    A B  C
# 1  1 6  9
# 2  2 7 10
# 3  3 8 11

paste(colnames(data),unlist(t(data)),collapse=",")
# [1] "A 1,B 6,C 9,A 2,B 7,C 10,A 3,B 8,C 11"

希望这可能有所帮助。

答案 2 :(得分:0)

如果你想保留标题,你可以试试这个:

  df <- read.table(textConnection("

                              Subject    Module        ID
                              History    WW2           1
                              English    Literature    2
                              Maths      Algebra       3"),stringsAsFactors=FALSE, header=TRUE)

 data.frame(t(unlist(df)))

 Subject1 Subject2 Subject3 Module1    Module2 Module3 ID1 ID2 ID3
1  History  English    Maths     WW2 Literature Algebra   1   2   3