如何重新編碼以下示例資料集中的0列?110i1:i3
df <- data.frame(id = c(11,22,33),
i1 = c(0,1,NA),
i2 = c(1,1,0),
i3 = c(0,NA,1))
> df
id i1 i2 i3
1 11 0 1 0
2 22 1 1 NA
3 33 NA 0 1
我有幾十列以i... 所以我需要一個索引條件來僅適用于這些列。所需的輸出將是:
> df1
id i1 i2 i3
1 11 1 0 1
2 22 0 0 NA
3 33 NA 1 0
uj5u.com熱心網友回復:
我們只能否定和強制
df[-1] <- (!df[-1])
-輸出
> df
id i1 i2 i3
1 11 1 0 1
2 22 0 0 NA
3 33 NA 1 0
uj5u.com熱心網友回復:
你可以通過索引來解決這個問題;如果id列之外的所有變數都以問題中的 i 開頭,則可以正常作業。
df[, 2:4] <- ifelse(df[, 2:4] == 0, 1, 0)
# or more succinctly, following the examples of others, and still using `ifelse`
df[-1] <- ifelse(df[-1] == 0, 1, 0)
df
#> id i1 i2 i3
#> 1 11 1 0 1
#> 2 22 0 0 NA
#> 3 33 NA 1 0
使用reprex v2.0.2創建于 2022-10-10
uj5u.com熱心網友回復:
我們可以簡單地使用-
> df[-1] <- 1 - df[-1]
> df
id i1 i2 i3
1 11 1 0 1
2 22 0 0 NA
3 33 NA 1 0
uj5u.com熱心網友回復:
我們只能i使用acrossand matchesfrom來改變以數字開頭的列,dplyr并且我們可以使用 更改您指定的值recode。
library(dplyr)
df %>%
mutate(across(matches('^i\\d '), recode, '1' = 0, '0' = 1))
或者,在基礎 R 中,您可以執行此操作
i_cols <- str_detect(colnames(df), '^i\\d ')
df[,i_cols] <- ifelse(df[,i_cols] == 0, 1, 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/513420.html
標籤:r重新编码
