r语言 - 我想使用循环对数据帧进行子集化,并另存为命名为组值的 csv 文件



我是R的新手,但找不到这个确切问题的答案。我有一个从 csv 文件中读入的数据帧 (df(,如下所示:

A,B,C,D,E,F,G,H,I,J
rabbit,brisbane,NA,8,3,2,2,6,2,10
cat,perth,NA,1,8,10,-3,3,5,7
NA,brisbane,bicycle,9,-2,7,-3,7,5,2
rat,brisbane,NA,5,-10,6,1,12,9,9
budgie,melbourne,NA,5,6,3,2,6,7,8
NA,melbourne,bicycle,11,9,0,-1,3,0,7
dog,adelaide,car,0,-4,10,3,7,4,1
rabbit,Canberra,car,5,7,10,-3,5,11,8
dog,brisbane,car,10,-10,6,3,8,0,4
rabbit,brisbane,boat,0,-3,5,2,9,3,3
rabbit,sydney,walk,7,-6,3,-1,4,10,12
cat,perth,NA,6,-4,3,0,3,NA,4
rat,Darwin,car,6,-3,10,-3,6,8,3
cat,perth,boat,7,11,1,NA,2,2,10
rabbit,sydney,NA,1,5,5,-3,2,10,4
rat,NA,walk,3,0,1,1,10,5,3
dog,brisbane,car,10,4,4,1,3,0,4
rabbit,adelaide,fly,7,-2,12,0,3,12,4
budgie,adelaide,fly,11,-9,8,3,6,2,2
rabbit,melbourne,bicycle,10,-10,1,NA,8,11,3
cat,adelaide,fly,3,10,3,-1,10,3,3
rat,sydney,fly,2,0,3,-1,0,7,7
NA,melbourne,walk,8,-1,12,-2,0,8,7
rat,sydney,walk,10,-1,8,1,7,5,3
dog,brisbane,car,10,7,7,1,10,7,11
dog,perth,bicycle,3,5,11,-3,2,0,7
dog,sydney,bicycle,11,4,1,0,12,7,0
dog,adelaide,walk,6,0,3,-2,0,12,12
rabbit,perth,boat,5,3,1,-2,1,NA,6
rabbit,NA,boat,4,9,2,3,12,3,1

我想在 A 列上对其进行子集化,并将子集另存为 csv 文件,该文件由 A 列中的值命名。

我使用了这段代码,它正确地生成了我想要的文件作为列表"df_split"的成员。这是通过键入 df_split$rabbit 来显示的,但生成的 csv 文件被命名为数字 (1.csv, 2.csv, .....(。

# Divide a big file into parts for each value of a variable.
# Sorting file
df <- df[ order(df$A), ]  
# Splitting file and creating character names
df_split <- split(df, df$A)
new_names <- as.character(unique(df$A))
# Writing csv files for dataframes in df_split
for (i in 1:length(df_split)) {
assign(new_names[i], df_split[[i]])
filename = paste(i, ".csv")
write.csv(df_split[[i]], filename, row.names = FALSE)  
}

有什么方法可以正确命名我的csv文件吗?

假设new_names数组和数据框列表的顺序正确,您可以只使用:

for (i in 1:length(df_split)) {
assign(new_names[i], df_split[[i]])
filename = paste(new_names[i], ".csv")    # change here
write.csv(df_split[[i]], filename, row.names = FALSE)  
}

目前,您使用循环数字索引来命名 CSV 文件,而不是该索引中存在的实际名称。