根据包含某些字符的列名称替换数据框中的值

问题描述 投票:0回答:1

我的数据集包含许多以相似名称开头的列

`CropType<-maize, beans,peas
NumberSM<-200,300,NA
PercentageSM<-90%,50%,NA
NumberLM<-600,NA,234
PercentageLM<-20%,NA,78%
df1<-data.frame(CropType,NumberSM,PercentageSM,NumberLM,PercentageLM)`

我希望请求一行代码,用 0.0 替换以 Number 开头的列中缺失的任何值,并用 0.0% 替换以 Percentage 开头的列中缺失任何值的任何列。

我想要的输出是

`CropType<-maize, beans,peas
NumberSM<-200,300,0.0
PercentageSM<-90%,50%,0.0%
NumberLM<-600,0.0,234
PercentageLM<-20%,0.0%,78%
df1<-data.frame(CropType,NumberSM,PercentageSM,NumberLM,PercentageLM)`

这个我试过了

`df1 %>%
  mutate(NumberLM=replace(NumberLM,is.na(NumberLM),0.0),
         PercentageLM=replace(PercentageLM,is.na(PercentageLM),'0.0%'))`

但是我有几列需要替换,并且我避免引用每一列来替换

r string dplyr replace
1个回答
0
投票

这是一种使用

mutate/across
的方法。请参阅代码注释以获取解释。

CropType <- c("maize", "beans", "peas")
NumberSM <- c(200,300,NA)
PercentageSM <- c("90%","50%",NA)
NumberLM <- c(600,NA,234)
PercentageLM <- c("20%",NA,"78%")
df1 <- data.frame(CropType,NumberSM,PercentageSM,NumberLM,PercentageLM)

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

# here mutate all columns where is.numeric returns TRUE
df1 %>%
  mutate(across(where(is.numeric), ~replace(.x, is.na(.x), 0.0)))
#>   CropType NumberSM PercentageSM NumberLM PercentageLM
#> 1    maize      200          90%      600          20%
#> 2    beans      300          50%        0         <NA>
#> 3     peas        0         <NA>      234          78%

# to change the percentages, first determine which
# columns have a '%' in them, then a mutate/across 
# similar to the one above does the trick
i_perc <- sapply(df1, \(x) any(grepl("%", x)))

df1 %>%
  mutate(across(which(i_perc), ~ replace(.x, is.na(.x), "0.0%")))
#>   CropType NumberSM PercentageSM NumberLM PercentageLM
#> 1    maize      200          90%      600          20%
#> 2    beans      300          50%       NA         0.0%
#> 3     peas       NA         0.0%      234          78%

创建于 2024-03-18,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.