我是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列文件。)
任何帮助将不胜感激!
答案 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条目。