我有一个包含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是否有快速方法。
任何帮助都会很棒! 感谢。
答案 0 :(得分:5)
将paste
与collapse
一起使用即可。 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