我目前不确定最好的方法,所以如果有任何关于更有效方法的建议,我将不胜感激!
首先,这里有一些玩具数据:
data <- data.frame(
"stim" = c("face", "object", " ", "pareidolia"),
"RT" = c(23, 24, 22, 25),
"Opac" = c(70, 60, 80, 65)
)
write.csv(data, "data.csv")
data <- data.frame(
"stim" = c("face", "pareidolia", " ", "pareidolia"),
"RT" = c(83, 24,52, 85),
"Opac" = c(70, 87, 8, 6)
)
write.csv(data, "data.csv")
我目前正在读取多个 .csv 文件,如下所示:
library("tidyverse")
base :: setwd("filepath")
files <- base::list.files(
path = ("filepath"),
recursive = TRUE,
pattern = "*.csv"
)
然后,我使用 .csv 文件内容创建数据帧列表,并删除与每个数据帧的刺激列中的空白单元格对应的行。然后,我从列表名称创建文件路径。
datalist <- lapply(files, read.csv)
with(datalist, subset(datalist, !("stim" == ""))) -> datalist
file_out <- paste0(names(datalist), ".csv")
最后,我尝试将列表中的每个数据帧写入它自己的 .csv 文件。
mapply(
function(x, y) write_csv(x, y),
datalist,
file_out
)
问题是这段代码似乎不起作用。除了一个标题为“.csv”的文件外,它不会输出任何 .csv 文件,打开该文件时,我收到一条错误消息,指出该文件不存在。有没有更好的方法来完成这个过程以达到预期的结果?非常感谢。
首先制作要处理的文件。
data <- data.frame(
"stim" = c("face", "object", " ", "pareidolia"),
"RT" = c(23, 24, 22, 25),
"Opac" = c(70, 60, 80, 65)
)
write.csv(data, "data1.csv")
data <- data.frame(
"stim" = c("face", "pareidolia", " ", "pareidolia"),
"RT" = c(83, 24,52, 85),
"Opac" = c(70, 87, 8, 6)
)
write.csv(data, "data2.csv")
现在问题来了。
list.files
;lapply
一个匿名函数来读取数据,从列stim
中删除所有不需要的空格,对 data.frame 进行子集化并将其重写到磁盘。files <- list.files(
path = "~/Temp",
pattern = "data.*\\.csv",
full.names = TRUE
)
lapply(files,\(x) {
df1 <- read.csv(x)
df1$stim <- trimws(df1$stim)
df1 <- subset(df1, stim != "")
write.csv(df1, x, row.names = FALSE, quote = FALSE)
})
现在检查文件是否已正确保存。
lapply(files, read.csv)
#> [[1]]
#> X stim RT Opac
#> 1 1 face 23 70
#> 2 2 object 24 60
#> 3 4 pareidolia 25 65
#>
#> [[2]]
#> X stim RT Opac
#> 1 1 face 83 70
#> 2 2 pareidolia 24 87
#> 3 4 pareidolia 85 6
创建于 2024-04-17,使用 reprex v2.1.0