有了數據框,我該如何去替換沿着所有行和列的所有特定值。例如說,我想,以取代NA
的所有空的記錄(不鍵入位置):替換數據框中的所有特定值
df <- data.frame(list(A=c("", "xyz", "jkl"), B=c(12, "", 100)))
A B
1 12
2 xyz
3 jkl 100
預期結果:
A B
1 NA 12
2 xyz NA
3 jkl 100
有了數據框,我該如何去替換沿着所有行和列的所有特定值。例如說,我想,以取代NA
的所有空的記錄(不鍵入位置):替換數據框中的所有特定值
df <- data.frame(list(A=c("", "xyz", "jkl"), B=c(12, "", 100)))
A B
1 12
2 xyz
3 jkl 100
預期結果:
A B
1 NA 12
2 xyz NA
3 jkl 100
像這樣:
> df[df==""]<-NA
> df
A B
1 <NA> 12
2 xyz <NA>
3 jkl 100
由於PikkuKatja並且glallen要求一個更一般的解決方案,我現在還不能評論,我會寫一個答案。您可以將報表中:
> df[df=="" | df==12] <- NA
> df
A B
1 <NA> <NA>
2 xyz <NA>
3 jkl 100
有關因素,zxzak的代碼已經產生的因素:
> df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)))
> str(df)
'data.frame': 3 obs. of 2 variables:
$ A: Factor w/ 3 levels "","jkl","xyz": 1 3 2
$ B: Factor w/ 3 levels "","100","12": 3 1 2
如果遇到了麻煩,我建議暫時下降的因素。
df[] <- lapply(df, as.character)
我們可以使用data.table快速獲取它。 首先沒有因素造成DF,
df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)), stringsAsFactors=F)
現在你可以使用
setDT(df)
for (jj in 1:ncol(df)) set(df, i = which(df[[jj]]==""), j = jj, v = NA)
,你可以將其轉換回data.frame
setDF(df)
如果你只想使用數據並保留因素更加困難,您需要使用
levels(df$value)[levels(df$value)==""] <- NA
其中value是每列的名稱。您需要將其插入到循環中。
如果要替換數據框中的多個值,循環遍歷所有列可能會有所幫助。
說你要替換""
和100
:
na_codes <- c(100, "")
for (i in seq_along(df)) {
df[[i]][df[[i]] %in% na_codes] <- NA
}
是有沒有辦法超過1個值有效地做到這一點!? – PikkuKatja
這對於因素不起作用,'df [df ==「xyz」] < - 「abc」'將出現「無效因子水平」錯誤。有更通用的解決方案嗎? – glallen
不適合我。我試過這個: dfSmallDiscreteCustomSalary [dfSmallDiscreteCustomSalary $ salary ==「<= 50K」] < - 「49K」。 仍然是唯一的(dfSmallDiscreteCustomSalary $薪水)我得到: [1]> 50K <= 50K –