我有调查数据,我正在尝试将具有分类数据(“完全同意”,“同意”等)的多个变量转换为数字(“ 6”,“ 5” ..),以便以后进行分析(使用摘要/平均值)
我已经尝试过了:
list = [{}, {}]
for item in list:
item['Age'] = 1
print(list)
但它返回NA的矩阵
df<-read_xlsx("Microdata_1.xlsx")
df[46:59] <- lapply(df[46:59], function(x) factor(x))
df[46:59] <- lapply(df[46:59], factor, levels=c(6,1,4,3,5,2))
df[46:59] <- lapply(df[46:59], function(x) as.numeric(as.character(x)))
答案 0 :(得分:0)
应该设置的数字是因子水平及其标签。
在下面的示例中,我假设类别数据值(“完全同意”,“同意”等)是已知的,并且位于向量levs
中。代码首先将字符串强制分解为因数,然后强制为数字。
df[2:4] <- lapply(df[2:4], factor, levels = levs, labels = c(1, 2, 3, 4, 5))
df[2:4] <- lapply(df[2:4], function(x) as.numeric(as.character(x)))
str(df)
#'data.frame': 10 obs. of 5 variables:
# $ X: num -1.207 0.277 1.084 -2.346 0.429 ...
# $ A: num 4 4 5 4 3 4 5 2 5 2
# $ B: num 3 4 4 3 1 3 4 2 3 2
# $ C: num 5 1 3 1 5 1 1 2 1 3
# $ Y: num 0.09 0.5192 0.3843 0.0701 0.3206 ...
数据创建代码。
levs <- scan(what = character(),
text = "
'Strongly disagree'
'Disagree'
'Neither agree nor disagree'
'Agree'
'Strongly agree'
")
set.seed(1234)
n <- 10
df <- data.frame(X = rnorm(n),
A = sample(levs, n, TRUE),
B = sample(levs, n, TRUE),
C = sample(levs, n, TRUE),
Y = runif(n),
stringsAsFactors = FALSE)