【问题标题】:Name a variable or object based on the value of another variable in R根据 R 中另一个变量的值命名变量或对象
【发布时间】:2022-06-29 21:02:50
【问题描述】:

我从不知道文件编号或名称的目录中读取数据文件。每个文件都有一个数据框(作为 parquet 文件)。我可以阅读那些文件。但是如何命名结果呢?

我想要一个类似命名列表的东西,其中文件名是元素的名称。我不知道如何在 R 中做到这一点。在 Python 中我会使用这样的字典

file_names = ['A.parquet', 'B.parquet']

all_data = {}

for fn in file_names:
    data = pd.read_parquet(fn)
    all_data[fn] = data

如何在 R 中解决这个问题?

library("arrow")

file_names = c('a.parquet', 'B.parquet')

# "named vector"?
daten = c()

for (pf in file_names) {
    # name of data frame (filename without suffix)
    df_name <- strsplit(pf, ".", fixed=TRUE)[[1]][1]

    df <- arrow::read_parquet(pf)

    daten[df_name] = df
}

这不起作用,因为我收到了这个错误

number of items to replace is not a multiple of replacement length

【问题讨论】:

  • 对不起,我不明白你的代码行是做什么的。

标签: r


【解决方案1】:

每个arrow::read_parquet() 调用都会返回一个数据帧。您想使用数据框列表存储循环的结果。特别是,您需要一个命名列表。方法如下。

library("arrow")

file_names <- c('a.parquet', 'B.parquet')

## loop through files
daten <- list()
for (i in 1:length(file_names)) {
  daten[[i]] <- arrow::read_parquet(pf)
}

## grab filename without suffix
names(daten) <- gsub(".parquet", "", file_names)

备注:由于列表的长度是已知的,所以最好使用初始化它

daten <- vector("list", length(file_names))

这样列表在循环过程中不会变大。

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多