我需要从我的数据框中获取变量名称,以确保它们的名称相同。起初它看起来很简单,我使用了两个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吗?我相信我错过了一些简单的事情。
答案 0 :(得分: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"
或者在数据框列表中使用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)