[英]Trying to set factor levels for specific variables in data frame--Lapply returns NA
我有調查數據,我正在嘗試將具有分類數據(“非常同意”、“同意”等)的多個變量轉換為數字(“6”、“5”..),以便稍后對其進行分析(匯總/均值) )
我試過這個:
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)))
但它返回一個 NA 矩陣
prob33 prob34 prob35 prob36 prob37 prob38 prob39 prob40 prob41 prob42 prob43 prob44 prob45 prob46
<fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct>
1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
8 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
應該設置的數字是因子水平及其標簽。
在下面的示例中,我假設分類數據值(“強烈同意”、“同意”等)是已知的並且位於向量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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.