我有一個包含所有字符值的資料集,我想根據原始字符值中包含的內容將一些更改為因子,將一些更改為數字(如果包含數字,則將列轉換為數字,如果包含字母,因子) . 我有這個 for 回圈,我正在沿著我的資料集進行排序,但我無法讓 i 回傳實際的單元格值。
l <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
for (i in df) {
if(i[c(1)] %in% l) {
as.numeric(i)
} else {
as.factor(i)
}
}
我也嘗試過 grepl 和 ifelse:
for (i in seq_along(df[c(0),])) {
ifelse((grepl(l, df[i])), as.numeric(i), as.factor(i))
}
這是資料集的可重現示例:
| col1 | col2 | col3 |
|---|---|---|
| 真的 | 1 | -25.4 |
| 錯誤的 | 2 | 123.23 |
| 錯誤的 | 3 | 321 |
| 真的 | 4 | -24 |
--對于這個例子,我希望 col1 是一個因子,而 col2, col3 是數字
uj5u.com熱心網友回復:
在基礎 R 中,只需執行以下操作:
df <- type.convert(df, as.is = FALSE)
str(df)
'data.frame': 4 obs. of 3 variables:
$ col1: Factor w/ 2 levels "false","true": 2 1 1 2
$ col2: int 1 2 3 4
$ col3: num -25.4 123.2 321 -24
uj5u.com熱心網友回復:
此解決方案使用一個嘗試轉換為數字和求和的函式:如果結果為 NA,則轉換為因子,否則轉換為數字。
然后使用lapply()anddata.frame()將該函式應用于每一列df并將結果收集到一個資料框中。
convert <- function (x) {
if(is.na(sum(as.numeric(x[!is.na(x)])))) {
as.factor(x)
} else {
as.numeric(x)
}
}
df2<-data.frame(lapply(df, convert))
uj5u.com熱心網友回復:
可以很好地使用dplyr::across:
library(dplyr)
mtcars %>%
as_tibble() %>% # to make printing show column class type
mutate(across(1:4, as.character),
across(5:7, as.factor))
結果:
# A tibble: 32 × 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <chr> <chr> <chr> <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
5 18.7 8 360 175 3.15 3.44 17.02 0 0 3 2
6 18.1 6 225 105 2.76 3.46 20.22 1 0 3 1
7 14.3 8 360 245 3.21 3.57 15.84 0 0 3 4
8 24.4 4 146.7 62 3.69 3.19 20 1 0 4 2
9 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2
10 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4
# … with 22 more rows
uj5u.com熱心網友回復:
嘗試以下操作:
x %>% mutate(across(starts_with('col1'), as.factor), across(contains(c('col1','col2')), as.numeric))
當然,如果您col1的名稱比所有其他列更獨特,那么您可以嘗試
x %>% mutate(across(starts_with('col1'), as.factor), across(!contains('col1'), as.numeric))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520898.html
標籤:rgrepl
