替换R中因子类型数据中的NA
数据帧X看起来像这样替换R中因子类型数据中的NA,r,R,数据帧X看起来像这样 State code New Jersey 1 New York 2 Califronia NA 所有列都是系数。我希望用文本或0替换NAis。这样我以后可以转置它们 当我尝试运行此命令时 X[is.na(X)] <- "0" X[is.na(X)]简单地说: X$code <- as.character(X$code) #as.numeric works just as good X[is.na(X)] <- "0" X$code
State code
New Jersey 1
New York 2
Califronia NA
所有列都是系数。我希望用文本或0替换NA
is。这样我以后可以转置它们
当我尝试运行此命令时
X[is.na(X)] <- "0"
X[is.na(X)]简单地说:
X$code <- as.character(X$code) #as.numeric works just as good
X[is.na(X)] <- "0"
X$code <- as.factor(as.numeric(X$code))
X$code简单地说:
X$code <- as.character(X$code) #as.numeric works just as good
X[is.na(X)] <- "0"
X$code <- as.factor(as.numeric(X$code))
X$code如果您不介意来回转换,您编写的代码将适用于矩阵
> X
State code code2
1 NewJersey 1 NA
2 NewYork 2 0
3 Califronia NA 4
> X<-as.matrix(X)
> X[is.na(X)] <- "0"
> X<-as.data.frame(X)
> X
State code code2
1 NewJersey 1 0
2 NewYork 2 0
3 Califronia 0 4
> str(X)
'data.frame': 3 obs. of 3 variables:
$ State: Factor w/ 3 levels "Califronia","NewJersey",..: 2 3 1
$ code : Factor w/ 3 levels " 1"," 2","0": 1 2 3
$ code2: Factor w/ 3 levels " 0"," 4","0": 3 1 2
>X
州代码2
1新泽西州1北美
2纽约2 0
加利福尼亚州
>X X[is.na(X)]X X
州代码2
1新泽西州10
2纽约2 0
3加州0 4
>str(X)
“data.frame”:3个obs。共有3个变量:
$State:系数w/3级“加利福尼亚州”、“新泽西州”…:2 3 1
$代码:系数w/3级“1”、“2”、“0”:1 2 3
$code2:系数w/3级“0”、“4”、“0”:3 1 2
如果您不介意来回转换,您编写的代码将适用于矩阵
> X
State code code2
1 NewJersey 1 NA
2 NewYork 2 0
3 Califronia NA 4
> X<-as.matrix(X)
> X[is.na(X)] <- "0"
> X<-as.data.frame(X)
> X
State code code2
1 NewJersey 1 0
2 NewYork 2 0
3 Califronia 0 4
> str(X)
'data.frame': 3 obs. of 3 variables:
$ State: Factor w/ 3 levels "Califronia","NewJersey",..: 2 3 1
$ code : Factor w/ 3 levels " 1"," 2","0": 1 2 3
$ code2: Factor w/ 3 levels " 0"," 4","0": 3 1 2
>X
州代码2
1新泽西州1北美
2纽约2 0
加利福尼亚州
>X X[is.na(X)]X X
州代码2
1新泽西州10
2纽约2 0
3加州0 4
>str(X)
“data.frame”:3个obs。共有3个变量:
$State:系数w/3级“加利福尼亚州”、“新泽西州”…:2 3 1
$代码:系数w/3级“1”、“2”、“0”:1 2 3
$code2:系数w/3级“0”、“4”、“0”:3 1 2
另一种使用内置因子的替代方案:
df <- data.frame(a=letters[1:3], b=c("d", "e", NA))
df
a b
1 a d
2 b e
3 c <NA>
df$b <- factor(df$b, exclude = NULL,
levels = c("d", "e", NA),
labels = c("d", "e", "f"))
df
a b
1 a d
2 b e
3 c f
对于许多因素,以下因素可能有用:
df[] <- lapply(df, function(x){
# check if you have a factor first:
if(!is.factor(x)) return(x)
# otherwise include NAs into factor levels and change factor levels:
x <- factor(x, exclude=NULL)
levels(x)[is.na(levels(x))] <- "0"
return(x)
})
df[]另一种使用内置因子的替代方案:
df <- data.frame(a=letters[1:3], b=c("d", "e", NA))
df
a b
1 a d
2 b e
3 c <NA>
df$b <- factor(df$b, exclude = NULL,
levels = c("d", "e", NA),
labels = c("d", "e", "f"))
df
a b
1 a d
2 b e
3 c f
对于许多因素,以下因素可能有用:
df[] <- lapply(df, function(x){
# check if you have a factor first:
if(!is.factor(x)) return(x)
# otherwise include NAs into factor levels and change factor levels:
x <- factor(x, exclude=NULL)
levels(x)[is.na(levels(x))] <- "0"
return(x)
})
df[]让我们创建一个具有因子级别的随机df
df <- data.frame(a=sample(0:10, size=10, replace=TRUE),
b=sample(20:30, size=10, replace=TRUE))
df[df$a==0,'a'] <- NA
df$a <- as.factor(df$a)
让我们创建一个具有因子级别的随机df
df <- data.frame(a=sample(0:10, size=10, replace=TRUE),
b=sample(20:30, size=10, replace=TRUE))
df[df$a==0,'a'] <- NA
df$a <- as.factor(df$a)
尝试库(car);X$codeforcats::fct\u explicit\u na(X$code,0)
谢谢。我的数据框架只有几个因素。我还有几个关于NAs的专栏。我希望将所有NAs更改为“缺失”或某些文本,最好是。@akaDrHouse-如果所有列都是因子,则不是如OP所述。巴拉,我认为数字列应该是那样的,数字。事实上,没有理由认为它们应该是一个因素。从您的数据来看,似乎您code
不应该是一个因素。为什么不使用数字
或整数
?试试库(car);X$codeforcats::fct\u explicit\u na(X$code,0)
谢谢。我的数据框架只有几个因素。我还有几个关于NAs的专栏。我希望将所有NAs更改为“缺失”或某些文本,最好是。@akaDrHouse-如果所有列都是因子,则不是如OP所述。巴拉,我认为数字列应该是那样的,数字。事实上,没有理由认为它们应该是一个因素。从您的数据来看,似乎您code
不应该是一个因素。为什么不是数字
或整数
?