我有一個數據框的列標記爲q1,q2,q3等。我想創建一個函數,它將採用參數(變量名稱,數據框架,水平矢量,標籤矢量)並將編碼答案更改爲字符串。例如,如果q3編碼爲1,2或3,並且我想將其更改爲「bad」,「neutral」,「good」AND q4是一系列4列(q4r1,q4r2,q4r3 ,q4r4)與編碼應答1,2,或3,我想改變那些 「紅」, 「藍」, 「綠」:爲什麼我不能在函數中使用lapply因子?
findCol <- function(vn, df) {
if (length(which(grepl(vn, names(df)))) > 1) {
which(grepl(vn, names(df)))
} else {
which(colnames(df)==vn)
}
}
而且
labelChng <- function(cv, df, levs, labs) {
if (length(cv) > 1) {
df[cv[1]:cv[length(cv)]] <- lapply(df[cv[1]:cv[length(cv)]], factor,
levels = levs, labels = labs)
} else {
df[cv] <- lapply(df[cv], factor, levels = levs, labels = labs)
}
}
然後
q3c <- findCol("q3", myData)
q3lev <- c(1:3)
q3lab <- c("bad", "neutral", "good")
q4c <- findCol("q4", myData)
q4lev <- c(1:3)
q4lab <- c("red", "blue", "green")
findCol函數工作得很好,但是當我嘗試運行labelChng時,它實際上並沒有改變任何東西。當我在控制檯運行此直接:
myData[q4c[1]:q4c[length(q4c)]] <- lapply(myData[q4c[1]:q4c[length(q4c)]], factor,
levels = q4lev, labels = q4lab)
它工作得很好,但不是當我使用:
labelChng(q4c, myData, q4lev, q4lab)
我是新來這,可能是缺少明顯的東西。任何反饋都有助於
第一個函數可以縮寫爲'findCol < - function(vn,df)which(grepl(vn,names(df)))'? –
我認爲你並沒有真正做出改變。您在'labelChng'函數中操作的'df'只在該函數的本地。如果你想改變某些東西,你應該使用'return(df)' –
@MikeyMike我在想同樣的東西 –