考虑一个具有混合数据类型的data.frame。
为了一个奇怪的目的,用户需要将所有列转换为字符。如何最好地完成?一个tidyverse尝试解决方案是这样的:
map(mtcars,as.character) %>% map_df(as.list) %>% View()
c2<-map(mtcars,as.character) %>% map_df(as.list)
当我调用str(c2)
时,它应该说一个包含所有字符的tibble或data.frame。
另一个选项是为write.csv()
或write_csv()
设置一些参数,以便在结果文件输出中实现相同的功能。
6条答案
按热度按时间izkcnapc1#
2019 -03-01 - 01
从dplyr 1.0.0开始,
_all()
函数变体被取代。新的方法是使用新的across()
函数。使用
across()
,我们选择要使用tidyselect helpers修改的列集(这里我们使用everything()
选择所有列),然后指定要应用于每个选定列的函数。在本例中,即as.character()
。原答复:
也可以使用
dplyr::mutate_all
。7y4bm7vi2#
以R为基数:
这会将列转换为字符类,保留data.frame的属性。调用
data.frame()
会导致它们丢失。**使用dplyr进行属性保存:**属性似乎在
dplyr::mutate(across(everything(), as.character))
中被保存,之前被dplyr::mutate_all
销毁。示例
在下面的第二种情况下,保留
example
属性:dwbf0jvd3#
这可能有效,但不确定是否是最好的。
fgw7neuy4#
使用
data.table
的最有效方法-**注意:**可以将
data table
中的几列转换为所需的列类型。如果我们想将所有列转换为字符,那么我们也可以这样做-
1tuwyuhd5#
已接受答案中的
mutate_all
被取代。您可以将
mutate()
函数与across()
一起使用:b5buobof6#
另一个选择是使用
purrr
包中的map_df
函数,如下所示:创建于2023-04-02使用reprex v2.0.2
如果您希望输出为
data.frame
,则可以将as.data.frame
添加到管道中。