R:根据值自动转换列类型
我有一个有很多列的tible。我不想一个接一个地改变它们。假设泰布尔看起来像这样:R:根据值自动转换列类型,r,dataframe,type-conversion,tibble,R,Dataframe,Type Conversion,Tibble,我有一个有很多列的tible。我不想一个接一个地改变它们。假设泰布尔看起来像这样: df <- tibble( x = c(1,0,1,1,'a'), y = c('A', 'B', 1, 'D', 'A'), z = c(1/3, 4, 5/7, 100, 3) ) df尝试以下操作: library(purrr) map2_dfc(df, df_map$col_type, type.convert, as.is = T) 此代码假定df\u map$col与name
df <- tibble(
x = c(1,0,1,1,'a'),
y = c('A', 'B', 1, 'D', 'A'),
z = c(1/3, 4, 5/7, 100, 3)
)
df尝试以下操作:
library(purrr)
map2_dfc(df, df_map$col_type, type.convert, as.is = T)
此代码假定df\u map$col
与names(df)
的顺序相同(感谢@Moody\u mudscappper指出这一点)
正如@NelsonGon所指出的,R中合适的数据类型应该是“整数”、“字符”和“双精度”
编辑以包括注释中要求的布尔变量的先前修改:
库(tidyverse)
df%>%
如果(~相同(排序(唯一()),c(1,2)),~{.-1})%>%
map2_dfc(df_map$col_type,type.convert,as.is=T)
尝试以下操作:
library(purrr)
map2_dfc(df, df_map$col_type, type.convert, as.is = T)
此代码假定df\u map$col
与names(df)
的顺序相同(感谢@Moody\u mudscappper指出这一点)
正如@NelsonGon所指出的,R中合适的数据类型应该是“整数”、“字符”和“双精度”
编辑以包括注释中要求的布尔变量的先前修改:
库(tidyverse)
df%>%
如果(~相同(排序(唯一()),c(1,2)),~{.-1})%>%
map2_dfc(df_map$col_type,type.convert,as.is=T)
我会使用包readr
来完成这样的任务,它是tidyverse
SuppressPackageStatupMessages(库(tidyverse))
#修改列类型以与?readr::cols兼容
df_地图$col_类型“i”“c”“d”
#根据您的规格转换
类型转换(df,exec(cols,!!!矢量映射))
#>类型转换列(字符列[[i]],规格$cols[[i]]中的警告,
#>哪个(是_字符)[i],:[4,1]:应为整数,但得到“a”
#>#tibble:5 x 3
#>x y z
#>
#>1 A 0.333
#>20B4
#> 3 1 1 0.714
#>41D100
#>5 NA A 3
我会使用包readr
来完成这样的任务,它是tidyverse
SuppressPackageStatupMessages(库(tidyverse))
#修改列类型以与?readr::cols兼容
df_地图$col_类型“i”“c”“d”
#根据您的规格转换
类型转换(df,exec(cols,!!!矢量映射))
#>类型转换列(字符列[[i]],规格$cols[[i]]中的警告,
#>哪个(是_字符)[i],:[4,1]:应为整数,但得到“a”
#>#tibble:5 x 3
#>x y z
#>
#>1 A 0.333
#>20B4
#> 3 1 1 0.714
#>41D100
#>5 NA A 3
type.convert(df)
您的映射没有有效的R数据类型。可能重复type.convert(df)
您的映射没有有效的R数据类型。可能重复的可能重复的只是想指出,由于map2\u dfc
来自purrr
包,您可以加载它,而不是加载为TidyVersesh的所有内容,谢谢!这里是否也可以包含用户定义的函数?我有e一些列的值为1,2为布尔值,在转换前应减去1?您可以事先修改这些变量:dplyr::mutate_if(df、~idential(sort(unique(.))、c(1,2))、~{.-1})
df\u map$col
未使用,因此它假定df
的col按df\u map$col
排序。这是真的,只有当df\u map$col
与名称(df)的顺序相同时,我的代码才能正常工作
。我将进行编辑以反映这一点,只是想指出,由于map2_dfc
来自purrr
软件包,您可以直接加载它,而不是加载为TidyVersesh的所有内容,谢谢!这里是否也可以包含用户定义的函数?我有一些列的值为1,2为布尔值在转换之前应该减去1吗?您可以事先修改这些变量:dplyr::mutate_if(df,~idential(sort(unique(.)),c(1,2)),~{-1})
df\u-map$col
未使用,因此它假定df
的col按df\u-map$col
排序。这是真的,只有当df\u-map$col
与names(df)
的顺序相同时,我的代码才能正常工作。我将进行编辑,以反映这比我的解决方案好这比我的解决方案好