修改r中数据帧中特定字符的值



我的数据帧是这样的。

X           Y              Z 
10.5 m³/s   15. m³/s    14.3 m³/s
10. m³/s    11. 5m³/s    16.7 m³/s
10.8 m³/s   15.7 m³/s    1.5 m³/s

我必须从我的数据帧中删除一些特定的字符。为了解决这个问题,我写了一些这样的代码:

df[] <- lapply(df,gsub, pattern='. m³/s', replacement='')

似乎起作用了。但我遇到了";问题,这是最初的形状的数据。

X      Y       Z 
10.5   15.     14.3
10.    11.5    16.7
10.8   15.7    1.5

我还做了pattern函数的每一个组合。

我需要双精度值,所以我必须删除刚好放置在值末尾的点。

谢谢你的帮助。

您可以通过添加一个匹配文字"."的正则表达式\.?来解释整数值中的小数。如果出现1次或0次

d <- data.frame(X = "10.5 m³/s", Y = "15. m³/s", Z = "14.3 m³/s")
lapply(d, gsub, pattern='\.? m³/s', replacement='')
$X
[1] "10.5"
$Y
[1] "15"
$Z
[1] "14.3"

也许readr::parse_number()也是一种选择?

library(dplyr)
df %>% mutate(across(everything(), readr::parse_number))

结果:

# A tibble: 3 x 3
X     Y     Z
<dbl> <dbl> <dbl>
1  10.5  15    14.3
2  10    11    16.7
3  10.8  15.7   1.5
library(tidyverse)
df %>% mutate(across(X:Z,~as.double(str_remove_all(.x, " |m³/s"))))

输出:

# A tibble: 3 × 3
X     Y     Z
<dbl> <dbl> <dbl>
1  10.5  15    14.3
2  10    11.5  16.7
3  10.8  15.7   1.5

输入:

structure(list(X = c("10.5 m³/s", "10. m³/s", "10.8 m³/s"), 
Y = c("15. m³/s", "11. 5m³/s", "15.7 m³/s"), Z = c("14.3 m³/s", 
"16.7 m³/s", "1.5 m³/s")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -3L))

最新更新