R更改变量的因子级别,并删除旧因子
我有一个很大的数据集,它是从R更改变量的因子级别,并删除旧因子,r,spss,levels,R,Spss,Levels,我有一个很大的数据集,它是从SPSS文件读取的。它包含多个行和列,从许多小型SPSS文件中读取。SPSS文件包含一些错误,我想在R中更正。当读取数据时,它在因子水平上具有所有噪声,但SPSS中的数据是正常的。我无法更改SPSS中许多单个文件中的因子级别。以下是我拥有的一小部分数据样本 data a b c d e [1] 3 5 1 Very dissatisfied 5
SPSS
文件读取的。它包含多个行和列,从许多小型SPSS
文件中读取。SPSS文件包含一些错误,我想在R中更正。当读取数据时,它在因子水平上具有所有噪声,但SPSS中的数据是正常的。我无法更改SPSS中许多单个文件中的因子级别。以下是我拥有的一小部分数据样本
data
a b c d e
[1] 3 5 1 Very dissatisfied 5 5
[2] 8 3 10 Don't Know 1
[3] 7 5 3 8 6
[4] 3 5 9 6 99
[5] 9 4 8 10 Very Satisfied 3
[6] 5 NA 99 Don't Know Very Satisfied 10
levels(data[,1])
[1] "1 Very Dissatisfied" "2" "3" "4"
[5] "5" "6" "7" "8"
[9] "9" "1" "10 Very Satisfied" "99 Don't know"
[12] "1 Very Bad" "99" "2 Satisfied" "10"
这些级别包含许多错误。我想把它们改成下面这样
x<-factor()
x<-ordered(x,levels=c("1 Very Dissatisfied","2 Satisfied","3 Satisfied","4 Satisfied",
"5 Satisfied","6 Satisfied","7 Satisfied","8 Satisfied","9 Satisfied","10 Very Satisfied",
"99 Dont Know"))
levels(x)
[1] "1 Very Dissatisfied" "2 Satisfied" "3 Satisfied" "4 Satisfied"
[5] "5 Satisfied" "6 Satisfied" "7 Satisfied" "8 Satisfied"
[9] "9 Satisfied" "10 Very Satisfied" "99 Dont Know"
x我建议保持SPSS属性不变,不使用SPSS中的值标签:
temp <- read.spss(file, use.value.labels = FALSE)
我建议不要使用SPSS中的值标签,保持SPSS属性不变:
temp <- read.spss(file, use.value.labels = FALSE)
我建议不要使用SPSS中的值标签,保持SPSS属性不变:
temp <- read.spss(file, use.value.labels = FALSE)
我建议不要使用SPSS中的值标签,保持SPSS属性不变:
temp <- read.spss(file, use.value.labels = FALSE)
清理数据。这只会留下数字和NA
data=apply(data,1:2,function(x) gsub("[^0-9]", "",x))
数据如下所示:
a b c d e
[1,] "3" "5" "1" "5" "5"
[2,] "8" "3" "10" "99" "1"
[3,] "7" "5" "3" "8" "6"
[4,] "3" "5" "9" "6" "99"
[5,] "9" "4" "8" "10" "3"
[6,] "5" NA "99" "10" "10"
重新编码你的字符串
# Install the car package
install.packages("car")
# Load the car package
library("car")
replace_string=function(x) {
recode(x,'1="1 Very Dissatisfied";
2="2 Satisfied";
3="3 Satisfied";
4="4 Satisfied";
5="5 Satisfied";
6="6 Satisfied";
7="7 Satisfied";
8="8 Satisfied";
9="9 Satisfied";
10="10 Very Satisfied";
99="99 Dont Know"')
}
data=apply(data,1:2,replace_string)
清理数据。这只会留下数字和NA
data=apply(data,1:2,function(x) gsub("[^0-9]", "",x))
数据如下所示:
a b c d e
[1,] "3" "5" "1" "5" "5"
[2,] "8" "3" "10" "99" "1"
[3,] "7" "5" "3" "8" "6"
[4,] "3" "5" "9" "6" "99"
[5,] "9" "4" "8" "10" "3"
[6,] "5" NA "99" "10" "10"
重新编码你的字符串
# Install the car package
install.packages("car")
# Load the car package
library("car")
replace_string=function(x) {
recode(x,'1="1 Very Dissatisfied";
2="2 Satisfied";
3="3 Satisfied";
4="4 Satisfied";
5="5 Satisfied";
6="6 Satisfied";
7="7 Satisfied";
8="8 Satisfied";
9="9 Satisfied";
10="10 Very Satisfied";
99="99 Dont Know"')
}
data=apply(data,1:2,replace_string)
清理数据。这只会留下数字和NA
data=apply(data,1:2,function(x) gsub("[^0-9]", "",x))
数据如下所示:
a b c d e
[1,] "3" "5" "1" "5" "5"
[2,] "8" "3" "10" "99" "1"
[3,] "7" "5" "3" "8" "6"
[4,] "3" "5" "9" "6" "99"
[5,] "9" "4" "8" "10" "3"
[6,] "5" NA "99" "10" "10"
重新编码你的字符串
# Install the car package
install.packages("car")
# Load the car package
library("car")
replace_string=function(x) {
recode(x,'1="1 Very Dissatisfied";
2="2 Satisfied";
3="3 Satisfied";
4="4 Satisfied";
5="5 Satisfied";
6="6 Satisfied";
7="7 Satisfied";
8="8 Satisfied";
9="9 Satisfied";
10="10 Very Satisfied";
99="99 Dont Know"')
}
data=apply(data,1:2,replace_string)
清理数据。这只会留下数字和NA
data=apply(data,1:2,function(x) gsub("[^0-9]", "",x))
数据如下所示:
a b c d e
[1,] "3" "5" "1" "5" "5"
[2,] "8" "3" "10" "99" "1"
[3,] "7" "5" "3" "8" "6"
[4,] "3" "5" "9" "6" "99"
[5,] "9" "4" "8" "10" "3"
[6,] "5" NA "99" "10" "10"
重新编码你的字符串
# Install the car package
install.packages("car")
# Load the car package
library("car")
replace_string=function(x) {
recode(x,'1="1 Very Dissatisfied";
2="2 Satisfied";
3="3 Satisfied";
4="4 Satisfied";
5="5 Satisfied";
6="6 Satisfied";
7="7 Satisfied";
8="8 Satisfied";
9="9 Satisfied";
10="10 Very Satisfied";
99="99 Dont Know"')
}
data=apply(data,1:2,replace_string)
我犯错误的地方是在格雷普。我使用了grep(^I$,data)
,而不是grep(I,data)
。这捕获了1和10,以及9和99。我使用了^I$
来精确匹配字符,因此^9$
只捕获了9个字符,而不是99个字符
为了删除因子中未使用的级别并将其用作顺序变量,我在最后使用了ordered(data)
,这就解决了问题
我使用了下面的代码来纠正自己:
步骤1:定义因子的级别
x<-factor()
x<-ordered(x,levels=c("1 Very Dissatisfied","2 Satisfied","3 Satisfied","4 Satisfied","5 Satisfied","6 Satisfied","7 Satisfied","8 Satisfied","9 Satisfied","10 Very Satisfied","Dont Know"))
x我犯错误的地方是grep。我使用了grep(^I$,data)
,而不是grep(I,data)
。这捕获了1和10,以及9和99。我使用了^I$
来精确匹配字符,因此^9$
只捕获了9个字符,而不是99个字符
为了删除因子中未使用的级别并将其用作顺序变量,我在最后使用了ordered(data)
,这就解决了问题
我使用了下面的代码来纠正自己:
步骤1:定义因子的级别
x<-factor()
x<-ordered(x,levels=c("1 Very Dissatisfied","2 Satisfied","3 Satisfied","4 Satisfied","5 Satisfied","6 Satisfied","7 Satisfied","8 Satisfied","9 Satisfied","10 Very Satisfied","Dont Know"))
x我犯错误的地方是grep。我使用了grep(^I$,data)
,而不是grep(I,data)
。这捕获了1和10,以及9和99。我使用了^I$
来精确匹配字符,因此^9$
只捕获了9个字符,而不是99个字符
为了删除因子中未使用的级别并将其用作顺序变量,我在最后使用了ordered(data)
,这就解决了问题
我使用了下面的代码来纠正自己:
步骤1:定义因子的级别
x<-factor()
x<-ordered(x,levels=c("1 Very Dissatisfied","2 Satisfied","3 Satisfied","4 Satisfied","5 Satisfied","6 Satisfied","7 Satisfied","8 Satisfied","9 Satisfied","10 Very Satisfied","Dont Know"))
x我犯错误的地方是grep。我使用了grep(^I$,data)
,而不是grep(I,data)
。这捕获了1和10,以及9和99。我使用了^I$
来精确匹配字符,因此^9$
只捕获了9个字符,而不是99个字符
为了删除因子中未使用的级别并将其用作顺序变量,我在最后使用了ordered(data)
,这就解决了问题
我使用了下面的代码来纠正自己:
步骤1:定义因子的级别
x<-factor()
x<-ordered(x,levels=c("1 Very Dissatisfied","2 Satisfied","3 Satisfied","4 Satisfied","5 Satisfied","6 Satisfied","7 Satisfied","8 Satisfied","9 Satisfied","10 Very Satisfied","Dont Know"))
x有许多列作为因子从SPSS中正确读取,但仍有许多列不是正确的因子。我的问题是,我们是否可以使用SPSS中的use.value.labels=TRUE/FALSE
有选择地阅读专栏以应用您的建议?如果没有这些文件,很难说。根据我的经验,我发现除策划外,应不惜一切代价避免各种因素。我更喜欢将矢量作为字符来减少麻烦,但这对我来说正是有效的。我使用这些数据来绘图,它会产生很多噪音,所以我想正确地将它们因子化。有许多列作为因子从SPSS中正确读取,还有许多列不是正确的因子。我的问题是,我们是否可以使用SPSS中的use.value.labels=TRUE/FALSE
有选择地阅读专栏以应用您的建议?如果没有这些文件,很难说。根据我的经验,我发现除策划外,应不惜一切代价避免各种因素。我更喜欢将矢量作为字符来减少麻烦,但这对我来说正是有效的。我使用这些数据来绘图,它会产生很多噪音,所以我想正确地将它们因子化。有许多列作为因子从SPSS中正确读取,还有许多列不是正确的因子。我的问题是,我们是否可以使用SPSS中的use.value.labels=TRUE/FALSE
有选择地阅读专栏以应用您的建议?如果没有这些文件,很难说。根据我的经验,我发现除策划外,应不惜一切代价避免各种因素。我更喜欢将矢量作为字符来减少麻烦,但这对我来说正是有效的。我使用这些数据来绘图,它会产生很多噪音,所以我想正确地将它们因子化。有许多列作为因子从SPSS中正确读取,还有许多列不是正确的因子。我的问题是,我们是否可以使用SPSS中的use.value.labels=TRUE/FALSE
有选择地阅读专栏以应用您的建议?如果没有这些文件,很难说。根据我的经验,我发现除策划外,应不惜一切代价避免各种因素。我更喜欢将向量作为字符来减少麻烦,但这正是我所需要的。我使用这些数据来绘图,它会生成l