将带有列表列的数据框另存为csv文件 [英] Save a data frame with list-columns as csv file
本文介绍了将带有列表列的数据框另存为csv文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据框,看起来像这样(3列作为列表).
I have the following data frame that looks like this (3 columns as list).
A tibble: 14 x 4
clinic_name drop_in_hours appointment_hours services
<chr> <list> <list> <list>
1 Birth Control and Sexual Health Centre <list [1]> <list [1]> <list [1]>
2 Black Creek Community Health Centre (Sheridan Mall Site) <list [1]> <list [1]> <list [1]>
3 Black Creek Community Health Centre (Yorkgate mall Site) <list [1]> <list [1]> <list [1]>
4 Crossways Clinic <list [1]> <list [1]> <list [1]>
5 Hassle Free Clinic <list [1]> <list [1]> <list [1]>
6 Immigrant Women's Health Center <list [1]> <list [1]> <list [1]>
7 Rexdale Community Health Center <list [1]> <list [1]> <list [1]>
8 Rexdale Youth Resource Center <list [1]> <list [1]> <list [1]>
9 Scarborough Sexual Health Clinic <list [1]> <list [1]> <list [1]>
10 Special Treatment Clinic <list [1]> <list [1]> <list [1]>
11 Taibu Community Health Center <list [1]> <list [1]> <list [1]>
12 The Gate <list [1]> <list [1]> <list [1]>
13 The Jane Street Clinic <list [1]> <list [1]> <list [1]>
14 The Talk Shop <list [1]> <list [1]> <list [1]>
我想将其输出为csv文件.引起我注意的是,数据框的列不应该是R中的列表.所以我做了一些Google搜索,发现了这个
I wanted to output it to as csv file. It has come to my attention that columns of data frames shouldn't be lists in R. So I did some google and found this save data.frames with list-column so I tried it out :
library(tidyverse)
df %>%
mutate(drop_in_hours = map_chr(drop_in_hours, ~ capture.output(dput(.))),
appointment_hours = map_chr(appointment_hours, ~ capture.output(dput(.))),
services = map_chr(services, ~ capture.output(dput(.))) ) %>%
write_csv("health.csv")
但是我出错了,我在这里错过了什么吗?
But I got an error , am I missing something here?
Error in mutate_impl(.data, dots) :
Evaluation error: Result 4 is not a length 1 atomic vector
.
推荐答案
创建包含列表列的小标题:
library(tibble)
clinic_name <- c('bobo center', 'yoyo plaza', 'lolo market')
drop_in_hours <- list(c("Monday: 2 pm - 5 pm", "Tuesday: 4 pm - 7 pm"))
appointment_hours <- list(c("Monday: 1 pm - 2 pm", "Tuesday: 2 pm - 3 pm"))
services <- list(c("skin graft", "chicken heart replacement"))
tibb <- data_frame(clinic_name, drop_in_hours, appointment_hours, services)
print(tibb)
编写一个通用函数,该函数将任何列表列转换为字符类型:
set_lists_to_chars <- function(x) {
if(class(x) == 'list') {
y <- paste(unlist(x[1]), sep='', collapse=', ')
} else {
y <- x
}
return(y)
}
应用功能对列表列进行微调:
new_frame <- data.frame(lapply(tibb, set_lists_to_chars), stringsAsFactors = F)
new_frame
将新格式化的数据框写入csv文件:
write.csv(new_frame, file='Desktop/clinics.csv')
这是一个csv文件,列表列扩展为常规字符串.
This is a csv file with the list columns expanded as regular strings.
这是一个无所不包的功能.只需输入您的小标题和文件名即可:
tibble_with_lists_to_csv <- function(tibble_object, file_path_name) {
set_lists_to_chars <- function(x) {
if(class(x) == 'list') { y <- paste(unlist(x[1]), sep='', collapse=', ') } else { y <- x }
return(y) }
new_frame <- data.frame(lapply(tibble_object, set_lists_to_chars), stringsAsFactors = F)
write.csv(new_frame, file=file_path_name)
}
用法:
tibble_with_lists_to_csv(tibb, '~/Desktop/tibb.csv')
这篇关于将带有列表列的数据框另存为csv文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文