r - 如果存在,则将数据框中的列的结构转换为字符,否则不要担心
问题描述
我正在创建一个函数,该函数会将几个逗号分隔的文件读入 R,然后再对它们进行变异以添加几列,然后再次将其导出以在另一个模型中使用这些文件。在某些文件中存在一个包含数字的特定字段,但模型将其表示为字符串(周围带有“”)。自然,R 显然将其读取为数字字段,因此如果列名存在,我想将其转换为字符。
我尝试过的函数中的代码如下:
with(df, if("name of column" %in% colnames(df)) as.character)
不幸的是,这不起作用。先感谢您!
Ps 我的脚本中有进一步的代码,它将在所有字符字段中添加“”,因此获取这些不是问题,只是实际转换为字符字段。
解决方案
我们可以编写一个简单的名称检查器函数:
check_names<- function(df, col_name = "Species"){
if(col_name %in% names(df)){
df[[col_name]]<- as.character(df[[col_name]])
}
df
}
str(check_names(iris,"Species"))
编辑
下面修改后的函数将适用于多个列:
check_names<- function(df, col_names = NULL){
if(all(col_names %in% names(df))){
df[,col_names]<- sapply(df[,col_names],as.character)
}
df
}
使用上述结果:
str(check_names(iris,c("Species","Sepal.Length")))
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: chr "5.1" "4.9" "4.7" "4.6" ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : chr "setosa" "setosa" "setosa" "setosa" ...
原始结果:
data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : chr "setosa" "setosa" "setosa" "setosa" .
# non existent names
str(check_names(iris,"nope"))
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
推荐阅读
- html - 背景视频出现在我的所有组件上
- html - 绝对定位元素在其可滚动容器上创建溢出
- firebase - Firebase 动态链接将自定义参数传递给 iOS 和 android
- c++ - 为树莓派 3 内核编译 cpp 文件时出现 aarch64-elf-gcc 错误
- javascript - 如何在地图图像加载时显示工具提示从 imagemapster 开始
- excel - Excel VBA - 同一文件夹中的多个 Dir()
- c++ - 使用 boost 库在 websocket 上传输图像
- kubernetes - 是否可以在 GCP 的 GKE 上使用云构建部署 kustomize 命令?
- ubuntu - 不能通过usb安装ubuntu和windows 10?
- python - Pandas - 连接两个特定列或更多列的元素