r - 在 R 中执行此操作的更好方法
问题描述
我从一个数据集中得到了下表。我必须处理数据集,这是我迄今为止一直在使用的代码:
X_1 | X_2 |
---|---|
<chr> | <chr> |
16% (4/25) | 32% (8/25) |
16% (4/25) | 32% (8/25) |
16% (4/25) | 32% (8/25) |
16% (4/25) | 32% (8/25) |
16% (4/25) | 32% (8/25) |
library(tidyverse)
names(age) <- c("Age18.25","Age26.35","Age36.45","Age46.55","Age56.65","Agegt65")
age <- age %>%
dplyr::select(names(age)) %>%
dplyr::mutate( Age18.25 = sub('\\%.*', '', Age18.25),
Age26.35 = sub('\\%.*', '', Age26.35),
Age36.45 = sub('\\%.*', '', Age36.45),
Age46.55 = sub('\\%.*', '', Age46.55),
Age56.65 = sub('\\%.*', '', Age56.65),
Agegt65 = sub('\\%.*', '', Agegt65))
age[] <- lapply(age, function(x) as.numeric(x))
head(age)
有没有更好的方法可以为我必须做的其他数据帧做同样的事情?所有数据框都具有相同的组成,我只想提取百分比,但是,当我这样做让我重命名它们时,列会有所不同并且列名一直存在问题。
这是输出。
X_1 | X_2 |
---|---|
<dbl> | <dbl> |
16 | 32 |
16 | 32 |
这是 dput 头部年龄:
structure(list(Age18.25 = c(11, 9, 40, 41, 19, 17), Age26.35 = c(18,
20, 23, 26, 30, 23), Age36.45 = c(18, 28, 17, 19, 12, 22), Age46.55 = c(14,
15, 7, 15, 14, 23), Age56.65 = c(14, 8, 13, 0, 14, 13), Agegt65 = c(25,
20, 0, 0, 12, 1)), row.names = c(NA, 6L), class = "data.frame")
解决方案
单线base R
解决方案:
sapply(df, function(x) as.numeric(sub("%.*", "", x)))
X1 X2
[1,] 45.00 566.000
[2,] 12.33 0.009
[3,] 1.00 33.000
数据:
df <- data.frame(
X1 = c("45% (4/25)", "12.33%", "1"),
X2 = c("566", "0.009% (8/66)", "33%")
)
推荐阅读
- html - 有没有办法让子元素不透明而父元素在 HTML/CSS 中保持半透明?
- python - 如何将 C# 中的图像发送到由 OpenCV 解码的 Flask 服务器?
- google-apps-script - 通过脚本安装触发器不断将触发器添加到模板表
- linux - 为什么“CC=xxx echo $CC”不能改变环境变量
- reactjs - 反应条件渲染的最佳实践?
- flutter - 如何在颤动中动态禁用工具提示?
- google-sheets - Google Sheets Column函数使用当前行获取右侧范围内所有列的平均值
- dynamic-programming - 航空航天工程问题中的动态规划
- postgresql - Ansible:postgresql_db 恢复挂起
- python - 列表类型不适合 JSON 序列化