m0_74428138 2023-12-03 05:23 采纳率: 100%
浏览 10
已结题

R语言批量修改csv文件中的某一列

批量修改csv文件中的Sample type列

img

setwd("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4")
files_name<-list.files("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4",pattern = "?.csv",full.names = TRUE)
length(files_name)
tmp<-list()
filenames = paste0("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4/",1:length(files_name),".csv")
for (i in 1:length(files_name)){
  tmp[[i]]=read.csv(files_name[i],sep = ",",quote = "\"")
  mapvalues(tmp[[i]]$"Sample type",c("serum"),c("urine"))
  write.csv(tmp[[i]], sep =",",file=filenames[i],row.names = TRUE, col.names =TRUE)}

但是报错The following from values were not present in x: serum,想问一下该怎么解决

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-03 05:45
    关注

    引自强大而免费的微信小程序:皆我百晓生

    报错是因为在使用mapvalues()函数时,你没有将其返回值赋给tmp[[i]]$"Sample type"这一列。你需要将它重新赋值给该列,以使修改生效。

    以下是修改后的代码:

    setwd("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4")
    files_name <- list.files("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4", pattern = "?.csv", full.names = TRUE)
    length(files_name)
    tmp <- list()
    filenames <- paste0("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4/", 1:length(files_name), ".csv")
    for (i in 1:length(files_name)) {
      tmp[[i]] <- read.csv(files_name[i], sep = ",", quote = "\"")
      tmp[[i]]$"Sample type" <- mapvalues(tmp[[i]]$"Sample type", c("serum"), c("urine"))
      write.csv(tmp[[i]], sep = ",", file = filenames[i], row.names = TRUE, col.names = TRUE)
    }
    

    这样修改后,每个CSV文件中的"Sample type"列中的"serum"将被替换为"urine"。请注意,你可能需要安装plyr包才能使用mapvalues()函数。可以使用以下命令进行安装:

    install.packages("plyr")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    m0_74428138 2023-12-03 05:54

    按照您的说法重新修改了一下,但还是报同样的错。😭

    回复
    专家-赤兔[在线] 回复 m0_74428138 2023-12-03 06:11

    非常抱歉我的回答没有解决您的问题。我对之前给出的答案进行了检查,并发现有一个错误。正确的方法是将mapvalues函数应用于数据框的特定列,并将其返回值赋给该列。请尝试以下修改后的代码:

    setwd("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4")
    files_name <- list.files("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4", pattern = "?.csv", full.names = TRUE)
    length(files_name)
    tmp <- list()
    filenames <- paste0("C:/Users/na/Desktop/cai_table/cai/PRJ20230703_4/", 1:length(files_name), ".csv")
    for (i in 1:length(files_name)) {
      tmp[[i]] <- read.csv(files_name[i], sep = ",", quote = "\"")
      tmp[[i]]$"Sample type" <- plyr::mapvalues(tmp[[i]]$"Sample type", c("serum"), c("urine"))
      write.csv(tmp[[i]], sep = ",", file = filenames[i], row.names = TRUE, col.names = TRUE)
    }
    

    请尝试运行修改后的代码,看看是否仍然报错。如果问题仍然存在,请提供相关的错误信息,以便我能够更好地解决问题。

    回复
查看更多回答(10条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月4日
  • 赞助了问题酬金15元 12月3日
  • 创建了问题 12月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部