某些列值的乘法 R
Multiplication of certain column values R
我在数据集中有一列如下所示:
- 实际
- chr
- 5.25%
- -5.50*1000000000
- 0.24%
- -4.00*1000
- 4.5%
我的目标是访问它并自动转换具有 *1000 或 *1000000000 的单元格并进行计算,例如 -5.5 * 1000000000 应该是单元格上的 - 5 500 000 000 和 -4 * 1000 应该是-4000.
有人知道怎么做吗?
此致
如果保证您的字符串是 R 可以逐字计算的有效表达式,您可以使用
eval(parse(text = '-5*1000'))
这会将字符串解析为等效的 R 代码,然后使用 eval 执行它。在这种情况下,它会导致 -5000 的数值结果。
小心行事。 More background on using eval(parse) can be found here
这可以通过首先对 *
进行拆分操作,然后使用基于 purrr
的函数 map_dbl
的映射操作来执行计算来完成:
library(purrr)
library(dplyr)
df %>%
# Step 1: split strings on `*`:
mutate(x_new = strsplit(x,"\*")) %>%
# Step 2: convert to numeric and perform calculation:
mutate(x_new = ifelse(str_detect(x_new, ","),
map_dbl(x_new, function(x) as.numeric(x)[1] * as.numeric(x)[2]),
x_new))
x x_new
1 -5.50*1000000000 -5.5e+09
2 35% 35%
3 -4.00*1000 -4000
(警告信息可以忽略)
测试数据:
df <- data.frame(x = c("-5.50*1000000000", "35%", "-4.00*1000"))
我在数据集中有一列如下所示:
- 实际
- chr
- 5.25%
- -5.50*1000000000
- 0.24%
- -4.00*1000
- 4.5%
我的目标是访问它并自动转换具有 *1000 或 *1000000000 的单元格并进行计算,例如 -5.5 * 1000000000 应该是单元格上的 - 5 500 000 000 和 -4 * 1000 应该是-4000.
有人知道怎么做吗?
此致
如果保证您的字符串是 R 可以逐字计算的有效表达式,您可以使用
eval(parse(text = '-5*1000'))
这会将字符串解析为等效的 R 代码,然后使用 eval 执行它。在这种情况下,它会导致 -5000 的数值结果。
小心行事。 More background on using eval(parse) can be found here
这可以通过首先对 *
进行拆分操作,然后使用基于 purrr
的函数 map_dbl
的映射操作来执行计算来完成:
library(purrr)
library(dplyr)
df %>%
# Step 1: split strings on `*`:
mutate(x_new = strsplit(x,"\*")) %>%
# Step 2: convert to numeric and perform calculation:
mutate(x_new = ifelse(str_detect(x_new, ","),
map_dbl(x_new, function(x) as.numeric(x)[1] * as.numeric(x)[2]),
x_new))
x x_new
1 -5.50*1000000000 -5.5e+09
2 35% 35%
3 -4.00*1000 -4000
(警告信息可以忽略)
测试数据:
df <- data.frame(x = c("-5.50*1000000000", "35%", "-4.00*1000"))