【问题标题】:is there a way to import multiple files with encoded file names有没有办法用编码的文件名导入多个文件
【发布时间】:2019-07-29 00:25:46
【问题描述】:

我几乎是 R 的初学者,所以如果我听起来很愚蠢,请原谅我。这是我的情况:

我为 10 项测试模拟了 960 种不同的回复模式。它们以 .txt 格式成对存储在我的目录中,因此有 480 对文本文件。它们被命名为:x_a_b_c_d 或 y_a_b_c_d 其中 a、b、c 和 d 是数字。 a 介于 1 和 3 之间,b 和 c 介于 1 和 4 之间,d 介于 1 和 10 之间。我需要从目录中调用每一对,将它们转换为频率表并将它们等同起来。我可以一一做:

首先,我从目录中调用一对,并使用freqtab() 函数将它们转换为频率表(因为equate() 仅适用于它们)。

path1<-"directory//x_1_1_1_1.txt"
x1<-(read.table(path1, header=TRUE))
ftx1<-freqtab(x1, items = list(1:10, 9:10), scales = list(0:10, 0:2))

path2<-"directory//y_1_1_1_1.txt"
y1<-(read.table(path2, header=TRUE))
fty1<-freqtab(y1, items = list(1:10, 9:10), scales = list(0:10, 0:2))

然后我将它们等同于:

eq1<- equate(ftx1, fty1, type="linear", method="levine", ws=1)$conc$yx

但是,我需要对所有配对一一进行。 那么有什么方法可以将 .txt 文件成对调用并将它们等同于一个函数?

【问题讨论】:

  • ls 制作一个路径向量,将它们读入a list of data frames(这将很好地适合数据框列),然后重新整形或聚合以使用这些对

标签: r import


【解决方案1】:

我不知道equate,所以我将从通用数据处理的角度回答。

xfiles <- list.files(path = "some_directory", pattern = "^x.*", full.names = TRUE)
yfiles <- gsub("^x", "y", xfiles)
bothexist <- file.exists(xfiles) & file.exists(yfiles)
xdata <- lapply(xfiles[bothexist], function(fn) {
  freqtab(read.table(fn, header = TRUE), items = list(1:10, 9:10), scales = list(0:10, 0:2))
})
ydata <- lapply(yfiles[bothexist], function(fn) {
  freqtab(read.table(fn, header = TRUE), items = list(1:10, 9:10), scales = list(0:10, 0:2))
})
eq <- Map(function(x,y) equate(x, y, type="linear", method="levine", ws=1)$conc$yx,
          xdata, ydata)

【讨论】:

  • tx 回复。帮助很大。 "^x_[0-9]*_[0-9]*_[0-9]*_[0-9]*.txt" 为我工作,而不是第一行中的 "^x*" "^x*" 没有区分 x 和 y 文件。此外,map 函数创建了一个错误:solve.default(smat) 中的错误:Lapack 例程 dgesv:系统完全是奇异的:U[2,2] = 0
  • 糟糕,模式应该是"^x.*",并带有额外的点。我的错。这能解决您的问题吗?如果是这样,请accept it。 (我不着急,但新成员可能不熟悉接受的礼节。如果您已经知道并正在考虑,请慢慢来。谢谢!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2017-07-15
  • 2015-08-24
  • 2017-08-01
  • 2020-09-23
  • 2021-10-23
相关资源
最近更新 更多