我有一个data.frame,有些列有NA值.我想<NA>用零替换s.我是怎么做到的
实际上,这里显示的mydate不是我的原始数据.原件太大了,不能在这里展示.
mydata = read.spss('mydata.sav', use.value.labels = TRUE, to.data.frame = TRUE, max.value.labels = Inf, trim.factor.names = FALSE, trim_values = FALSE, reencode = "UTF-8")
> mydata
Q_16_O3 Q_16_O4 Q_16_O5 Q_16_O6 Q_16_O7 Q_16_O8 Q_16_O9
10 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
11 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
12 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
13 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
14 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
15 Trem <NA> <NA> <NA> <NA> <NA> <NA>
16 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
17 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
18 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
19 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
20 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
str(mydata)
'data.frame': 11 obs. of 7 variables:
$ Q_16_O3: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA 4
NA NA NA NA ...
$ Q_16_O4: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
$ Q_16_O5: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
$ Q_16_O6: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
$ Q_16_O7: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
$ Q_16_O8: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
$ Q_16_O9: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
NA NA NA NA NA ...
Run Code Online (Sandbox Code Playgroud)
我想使用freq函数,所以我不能改变它的结构(mydata).
ps:我的问题是<NA>,不是 NA
在这种NA情况下,我在这里有一个解决方案.
对于几乎任何X包含数字的数据结构,请使用
X[is.na(X)] <- 0
Run Code Online (Sandbox Code Playgroud)
你的问题似乎有点混乱 - 你已经表明你的意思<NA>不是NA,没有解释什么类型 <NA>.
如果是"<NA>"你的意思,那么
X[X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)
如果数据框中包含混合数据类型,请检查以下内容:
X[is.character(X) & X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)
这在数字情况下严格更有用.
X[is.numeric(X) & is.na(X)] <- 0
Run Code Online (Sandbox Code Playgroud)
这是处理R中丢失的数据很常见的成语,但你也应该看看参数,na.rm = TRUE其中许多功能,如mean,sum,&C.会接受.
此策略将失败,因为您无法通过分配因子的值来添加新的因子级别.我没有使用过read.spss,但是看一下文档,我建议你在use.value.labels = FALSE你的调用中添加参数,以避免首先创建因素.
在您的特定情况下,您的整个数据框具有相同的类型(因子).这意味着转换为字符矩阵是安全的
> class(mydata[[1]])
"factor"
> mydataM <- as.matrix(mydata)
> mode(mydataM)
"character"
Run Code Online (Sandbox Code Playgroud)
现在您可以替换NA值
X[is.character(X) & X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)
在更一般的情况下,您将不需要的因子列与其他类型混合在一起,您需要做一些更复杂的事情.
myDataM=as.data.frame(lapply(x,
function(x)if(class(x)=="factor")as.character(x)else x))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24658 次 |
| 最近记录: |