카테고리 없음

[아르 자형] R-문자열에서 데이터 프레임 열 가져 오기 [중복]

필살기쓰세요 2021. 2. 16. 19:51

당신은 변해야합니다

dfData$as.name(strColName) <- factor(dfData$get(strColName))

...에

dfData[[strColName]] <- factor(dfData[[strColName]])

 

?"[["

더 많은 것을 읽을 수 있습니다 .귀하의 경우 열 이름은 프로그래밍 방식으로 생성

[[]]

되며 유일한 방법입니다. 이 예제는 다음과 같은 문제를 설명하기에 충분히 명확 할 것입니다

$

.

dat <- data.frame(x = 1:5, y = 2:6)
z <- "x"

dat$z
# [1] NULL

dat[[z]]
# [1] 1 2 3 4 5

다른 답변에 대해

apply

적용하는 기능이

as.factor

또는 이므로 확실히 작동하지 않습니다

factor

.

apply

항상 행렬에서 작동하고

(데이터 프레임에 데이터 프레임을 제공하면 먼저 행렬로 변환) 행렬

을 반환하지만 행렬에 요인 데이터 클래스를 가질 수 없습니다. 이 예를 고려하십시오.

x <- data.frame(x1 = letters[1:4], x2 = LETTERS[1:4], x3 = 1:4, stringsAsFactors = FALSE)
x[, 1:2] <- apply(x[, 1:2], 2, as.factor)

str(x)
#'data.frame':  4 obs. of  3 variables:
# $ x1: chr  "a" "b" "c" "d"
# $ x2: chr  "A" "B" "C" "D"
# $ x3: int  1 2 3 4

요인이 아닌 문자 변수가 여전히 있습니다. 내가 말했듯이 우리는 다음을 사용해야합니다

lapply

.

x[1:2] <- lapply(x[1:2], as.factor)

str(x)
#'data.frame':  4 obs. of  3 variables:
# $ x1: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
# $ x2: Factor w/ 4 levels "A","B","C","D": 1 2 3 4
# $ x3: int  1 2 3 4

이제

x1

에서 요인 분류를 볼 수

x2

있습니다.

apply데이터 프레임에 사용 하는 것은 결코 좋은 생각이 아닙니다.

소스 코드를 읽으면

apply

:

    dl <- length(dim(X))
    if (is.object(X)) 
        X <- if (dl == 2L) 
                as.matrix(X)
                    else as.array(X)
                    

데이터 프레임 (2 차원)이 먼저 행렬로 강제 변환되는 것을 볼 수 있습니다. 이것은 매우 느립니다. 데이터 프레임 열에 여러 개의 다른 클래스가있는 경우 결과 행렬에는 하나의 클래스 만 있습니다. 그러한 강압의 결과가 어떻게 될지 누가 알겠습니까?그러나

apply

일반

for

루프를 사용하여 C가 아닌 R로 작성되었습니다 .

 for (i in 1L:d2) {
        tmp <- forceAndCall(1, FUN, newX[, i], ...)
                if (!is.null(tmp)) 
                            ans[[i]] <- tmp
                            

따라서

for

직접 작성 하는 명시 적 루프 보다 낫지 않습니다 .-------------------
다른 방법을 사용합니다. 요인으로 변경할 열 이름의 벡터를 만듭니다.

factorCols <- c("Admit", "Rank")

그런 다음 인덱스로 다음 열을 추출합니다.

myCols <- which(names(dfData) %in% factorCols)

마지막으로 apply를 사용하여 이러한 열을 요인으로 변경합니다.

dfData[,myCols] <- lapply(dfData[,myCols],as.factor)



출처
https://stackoverflow.com/questions/39940021