从数据框

时间:2016-10-24 00:25:54

标签: r

我是R的新手,并试图让我的生活更轻松。我有一个数据框,其中包含几个不同大小的列。主要是它将是一个基因'列和其余部分将是针对不同患者/病症的表达数字数据。我希望1)按每个数字列排序,2)创建仅包含'基因的文件。列和每个数字列。我试图为此生成for循环。以mtcars内置数据库为例,我生成了以下代码:

mtcars

for (i in 2:ncol(mtcars)) {
  twocolumns <- data.frame(mtcars[,c(1,i)])
  write.csv(twocolumns, paste0(i,'.txt'), row.names = F)
}

这将创建名称为1,2,3,4 ...&#39; .txt&#39;的文件。我如何制作这些以使它们与列名相同?

此外,我还没有弄清楚排序部分。到目前为止,我已尝试过这个

mtcars <- mtcars[order(i),]

(在&#39; twocolumns&#39;行之前,但这会创建1行,2列文件。)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

对于名称问题,将i替换为colnames(twocolumns [2]) 既然你不关心rownames,我使用dplyr :: arrange来按每个数据框的col1和col2排序。

mtcars
require(dplyr)
for (i in 2:ncol(mtcars)) {
    twocolumns <- data.frame(mtcars[,c(1,i)])
    twocolumns<-arrange(twocolumns,twocolumns[,1],twocolumns[,2])
    write.csv(twocolumns, paste0(colnames(twocolumns[2]),'.txt'), row.names = F)
}

答案 1 :(得分:0)

基础R中的解决方案:

for (i in 2:ncol(mtcars)) {
  twocolumns <- data.frame(mtcars[,c(1,i)])
  write.csv(twocolumns[order(twocolumns[, 2]), ], paste0(colnames(mtcars)[i],'.txt'), row.names = F)
}

说明: 您想根据第二列的订购dataframe,因此twocoloumns[order(twocolumns[, 2]), ]colnames(...)返回dataframe列名的向量。使用colnames(...)[i]提取 i t条目。