我對 R 和一般編程有點陌生。我必須清理大量資料,而且通常在多個列中都是類似的問題。所以,我想使用回圈,而不是寫出每一行代碼。我有類似這樣的資料:
black <- c("1.33%", "9.22%", "10.71%")
white <- c("5.23%", "8.12%", "11.72%")
day <- c("Wednesday", "Thursday", "Friday")
blue <- c("2.21%", "1.12%", "8.79%")
df <- data.frame(black, white, day, blue)
這給了我一個像這樣的資料框:
black white day blue
1 1.33% 5.23% Wednesday 2.21%
2 9.22% 8.12% Thursday 1.12%
3 10.71% 11.72% Friday 8.79%
我讀過有'for'回圈,并且apply()系列也像R中的回圈一樣作業......我如何回圈通過變數黑色,白色和藍色(但不是白天),以便我可以:
- 洗掉 % 符號
- 將型別從 char 更改為 numeric
- 四舍五入到小數點后一位?
就像我說的那樣,我想知道如何將其撰寫為 for 回圈和應用程式。要洗掉 % 符號,我之前使用過 mutate 和 gsub ...
感謝您的建議,特別是幫助我撰寫清晰的代碼!最好的,羅杰
uj5u.com熱心網友回復:
這是一種使用的整潔方法 dplyr
library(dplyr)
clean_my_data<-function(input){
gsub("%", "", input) %>% as.numeric() %>% round(1)
}
df_new<-df %>%
mutate(across(c(black,white,blue), clean_my_data))
df_new
#> black white day blue
#> 1 1.3 5.2 Wednesday 2.2
#> 2 9.2 8.1 Thursday 1.1
#> 3 10.7 11.7 Friday 8.8
由reprex 包于 2022-01-15 創建(v2.0.1)
uj5u.com熱心網友回復:
這是一種快速而骯臟的方法,可以改進!
首先,您需要一個完成這項作業的函式,然后應用該函式(或者您執行一個回圈,這取決于您)。
clean_color <- function(x) {
# just remove the last char, it can fail on data like that "1.38% "
without_percent = substr(x,
start = 1,
stop = nchar(x) - 1)
# second part convert in mun and round it
round(as.numeric(without_percent),1)
}
然后你應用這個函式:
sapply(df[,c(1:2,4)], clean_color)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411435.html
標籤:
下一篇:在二進制組合上迭代變數
