【问题标题】:Write multiple csv files based on filter applied in r [closed]根据在 r [关闭] 中应用的过滤器编写多个 csv 文件
【发布时间】:2017-11-19 06:33:54
【问题描述】:

这是我的数据框

df_temp=data.frame(ID=c(1,1,2,3,3),City=c("a","a","b","c","c"),Qty=c(20,14,40,50,60))

我想过滤唯一城市的数据并根据过滤结果导出该数据,并将名称作为唯一城市的名称 所以我将有 3(a.csv, b.csv, c.csv) 带有记录的 csv 文件

a.csv
ID  City Qty
1    a    20
1    a    14

b.csv
ID  City Qty
2    b    40

c.csv
ID  City Qty
3    c    50
3    c    60

这是我尝试过的

name=as.character(unique(df_temp[,2]))
df_temp1=c()
for(i in df_temp[,2]){
paste("D:/Files",df_temp[i,2])
df_temp1[i]=filter(df_temp, City %in% c("a"))
write.csv("D/:Files",paste("D:/Files",name[i],".csv",sep = ""))
}

但这给了我的“FileNa.csv”空行。 任何帮助将不胜感激..谢谢

【问题讨论】:

  • write.csv 的第一个参数应该是你要写的R 对象

标签: r csv for-loop dataframe


【解决方案1】:
  1. ?write.csv检查正确的参数:write.table(x, file = "")

  2. 如果我没有误解的话,这个想法应该是首先创建数据帧,而不必包括文件名的路径。

  3. 我猜你想循环遍历唯一的城市名称,而不是 for() 循环中的每个城市名称。

  4. 请在您的下一个问题中使用格式正确的代码(带空格——您也可以咨询Google's R Style Guide)。

  5. 为什么你使用= 而不是<-?你为什么使用%in%?为什么你使用filter() 而不是subset()? 请查阅相关函数文档(例如:?filter 表明这不是适合您想要执行的函数!)

对于每个城市名称,以下将每个数据框存储为列表的一个元素。 它还为每个数据框保存一个 csv 文件(每个数据框对应不同的城市)。

dataframe_temp = data.frame(ID = c(1, 1, 2, 3, 3), 
                            City = c("a", "a", "b", "c", "c"), 
                            Qty = c(20, 14, 40, 50, 60))

dataframe.list <- list()

# avoid hardcoded numbers as ", 2" as theses can 
# change in the future, after e.g. an expansion of the dataframe!
for (city in unique(dataframe_temp$City)) { 

    print(city)

    dataframe.list[[i]] = subset(dataframe_temp, City == city) 

    # use your folder location instead of "~/"
    write.csv(x = dataframe.list[[i]], file = paste0("~/", "dataframe_for_city_", city,".csv")) 
}

对于网络迷,我将 emilliman5 的答案扩展为更大的数据集(想想写多 GB 的速度要快得多)data.table

library(data.table)
DT <- data.table(ID = c(1, 1, 2, 3, 3), 
                        City = c("a", "a", "b", "c", "c"), 
                        Qty = c(20, 14, 40, 50, 60))
# setkeyv(DT, 'City') # check if you really need a key: https://stackoverflow.com/questions/20039335/what-is-the-purpose-of-setting-a-key-in-data-table
invisible(lapply(unique(DT[, City]), function(city) 
          fwrite(x = subset(DT, City == city), 
              file = paste0("~/", "DT_for_city_", city,".csv"))))

【讨论】:

  • 是的,这有效..非常感谢..感谢您的努力!!!
【解决方案2】:

这样的事情怎么样:

df_temp=data.frame(ID=c(1,1,2,3,3),City=c("a","a","b","c","c"),Qty=c(20,14,40,50,60))

cities <- split(df_temp, df_temp$City)

lapply(cities, function(x) write.csv(x, file=paste0("D:/Files/City_", x[1,"City"], ".txt")))

【讨论】:

  • 请看我的编辑
  • 是的..工作得很好......谢谢..谢谢你的努力!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-05-06
  • 2018-08-07
相关资源
最近更新 更多