我的数据框架包含既有数值又有字符串的列,例如"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