R:根据值自动转换列类型

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

我有一个有很多列的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
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)
的顺序相同时,我的代码才能正常工作。我将进行编辑,以反映这比我的解决方案好这比我的解决方案好