这是我的数据框
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"空行。 任何帮助将非常感谢..谢谢
答案 0 :(得分:1)
这样的事情怎么样:
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")))
答案 1 :(得分:1)
使用?write.csv
检查正确的参数:write.table(x, file = "")
。
如果我没有误解,那么应该首先创建数据框,而不必包括文件名的路径。
我想您想循环浏览唯一的城市名称,而不是for()
循环中的每个城市名称。
请在下一个问题中使用格式正确的代码(有空格 - 您也可以咨询Google's R Style Guide)。
为什么使用=
代替<-
?为什么使用%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"))))