如何删除多个 .csv 文件的行

问题描述 投票:0回答:1

我目前不确定最好的方法,所以如果有任何关于更有效方法的建议,我将不胜感激!

首先,这里有一些玩具数据:

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 文件,打开该文件时,我收到一条错误消息,指出该文件不存在。有没有更好的方法来完成这个过程以达到预期的结果?非常感谢。

r csv mapply
1个回答
0
投票

首先制作要处理的文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.