仅当r中的列中为数字时进行除法取整



我的数据框架包含既有数值又有字符串的列,例如"n.a."例如,

在这些列中,如果一个值是数字,我想将其转换为百万,然后四舍五入,否则我想保持它的原样。

2015               2016
1           216683720          185611751
2           381416280          271288249
3             7700000           11150000
4           843200000          864800000
5             2400000            2400000
6          1292300000         1264400000
7            38940000           27900000
8            69908032           74742601
9            82891968           78057399
10           29030000           47600000
11           22900000           12700000
12             270000             300000
13           13482407           11131336
14           72244071           40934757
15             500000             500000
16             500000             500000
17             500000             500000
18               n.a.               n.a.

我尝试将其转换为百万和四舍五入,仅适用于列的数值:

y_te[c("2015","2016")] <- lapply(y_te[c("2015","2016")], function(n) ifelse(is.numeric(n), n/(1000000), n))
y_te[c("2015","2016")] <- lapply(y_te[c("2015","2016")], function(n) ifelse(is.numeric(n), round(n, 1), n))

然而,这是我得到的:

2015      2016
1  216683720 185611751
2  216683720 185611751
3  216683720 185611751
4  216683720 185611751
5  216683720 185611751
6  216683720 185611751
7  216683720 185611751
8  216683720 185611751
9  216683720 185611751
10 216683720 185611751
11 216683720 185611751
12 216683720 185611751
13 216683720 185611751
14 216683720 185611751
15 216683720 185611751
16 216683720 185611751
17 216683720 185611751
18 216683720 185611751

怎么了?非常感谢你的帮助。

library(tidyverse)
df <- tribble(
~"2015", ~"2016",
"216683720"     ,     "185611751",
"381416280"      ,    "271288249",
"7700000 "       ,   "11150000",
"n.a"            ,   "n.a"
)  
df %>%
mutate(across(everything(), ~ round(as.numeric(.x)/1000000, 1)))
#> # A tibble: 4 x 2
#>   `2015` `2016`
#>    <dbl>  <dbl>
#> 1  217.   186. 
#> 2  381.   271. 
#> 3    7.7   11.2
#> 4   NA     NA

由reprex包(v2.0.1)创建于2022-06-16

最新更新