2017-06-01 92 views
0

我需要从我的数据框中获取变量名称,以确保它们都被命名为相同。起初看起来简单,我使用的测试代码有两个DFS:将变量名称转换为矩阵的循环

x=rbind(colnames(df1), colnames(df2)) 

并使用实施它看起来是这样的:

VAR1 VAR2 VAR3 
VAR1 VAR2 VARa 

而且x被视为matrix,这是非常方便的。

但是,由于有更多的DFS不是两个循环是必需的,所以我写了简单的代码:

varnames=0 
for (i in 1:length(mylist){ 
varnames=rbind(colnames(get(mylist[i]))) 
} 

mylist是我的DFS名称列表。对象varnames是一个matrix,但它只有一行...你能给我提供quickfix吗?我相信我缺少一些简单的东西。

回答

1

您可以使用do.call

cn1 <- c("aa", "bb", "cc") 
cn2 <- c("ab", "bb", "cc") 
cn3 <- c("ab", "bc", "cc") 

cnames <- list(cn1, cn2, cn3) 

do.call(rbind, cnames) 

#  [,1] [,2] [,3] 
#[1,] "aa" "bb" "cc" 
#[2,] "ab" "bb" "cc" 
#[3,] "ab" "bc" "cc" 

或可替代dataframes的名单上使用sapply

df1 <- data.frame(aa=runif(9), bb=runif(9), cc=runif(9)) 
df2 <- data.frame(ab=runif(9), bb=runif(9), cc=runif(9)) 
df3 <- data.frame(ab=runif(9), bc=runif(9), cc=runif(9)) 

dataframes <- list(df1, df2, df3) 

sapply(dataframes, colnames) 

#  [,1] [,2] [,3] 
#[1,] "aa" "ab" "ab" 
#[2,] "bb" "bb" "bc" 
#[3,] "cc" "cc" "cc" 

从没有加载

CSV文件,这样做首先创建示例文件

library(Hmisc) 

df1 <- data.frame(aa=runif(9), bb=runif(9), cc=runif(9)) 
df2 <- data.frame(ab=runif(9), bb=runif(9), cc=runif(9)) 
df3 <- data.frame(ab=runif(9), bc=runif(9), cc=runif(9)) 

# create named list of data frames 
dataframes <- llist(df1, df2, df3) 

dir <- "dftest" 
dir.create(dir) 

# write data frames in list to individual csv files int specified directory 
lapply(names(dataframes), function(x) { 
    write.csv(dataframes[[x]], file=file.path(dir, paste0(x, ".csv")), 
    row.names=FALSE) 
    }) 

读取CSV文件并获得列名

# get the path of the csv files 
filenames <- file.path(dir, list.files(dir, pattern="*.\\.csv$")) 

# read csv files into a list and assign names 
csv.list <- lapply(filenames, read.csv) 
names(csv.list) <- sub("\\.csv$", "", basename(filenames)) 

# same as before 
sapply(dataframes, colnames) 
+0

我试图用你的解决方案,并复制你的例子。我相信问题是'cnames'和'dataframes'都是由你使用的整个对象组成的对象('dataframes'返回3个随机dfs)。在我的情况下'mylist'只包含我的dfs名称,如:df1.csv,df2.csv ... dfn.csv .. – Alexandros

+0

啊,那么你必须首先使用'read.csv'加载数据。我会看看我是否可以鞭打一些东西。 – AkselA