r
  • loops
  • conditional
  • dataframe
  • 2010-01-12 3 views 1 likes 
    1

    R 데이터 프레임의 값을 열로 바꾸려고합니다. 나는 주어진 데이터 프레임의 열 목록을 반복하고 모든 "예"값을 1로 바꾸고 다른 모든 값을 0으로 바꾸고 싶습니다.루프에서 변수를 사용하여 R 데이터 프레임 변환

    transform() 및 ifelse() 함수를 사용하여이 작업을 시도했습니다. 이런 식으로 뭔가 :

    Error: unexpected '=' in: 
    "for(i in 1:length(Appliances)){ 
    dataframe <- transform(dataframe, ColumnNames[i] =" 
    

    모르겠어요 : 코드의이 작품은 루프 외부에서 명시 적 열 이름과 함께 잘 작동하지만 배열로 나에게 다음과 같은 오류를 줄 것이다

    # List of selected Columns: 
    ColumnNames = c("Frigori", "Microond" , "Arca", "Aspira") 
    
    # Replace Values in dataframe 
    for(i in 1:length(ColumnNames)){ 
    dataframe <- transform(dataframe, ColumnNames[i] = ifelse(Columnames[i] == "Yes", 1, 0)) 
    } 
    

    여기서 잘못된 점이 있지만 문제는 변수 substi와 관련이 있어야합니다. 주의.

    답변

    7
    코드는 실제로 모든 일 개 짧은없이 루프와 라인이나 apply()로 단순화 할 수

    :

    dataframe <- data.frame(a = c("No", "Yes", "No", "No", "Yes"), 
             b = c("Hi", "Hi", "Mom", "Hi", "Mom"), 
             c = c("Yes", "Yes", "Yes", "Yes", "No")) 
    cols <- c("a","c") 
    dataframe[,cols] <- as.numeric(dataframe[,cols]=="Yes") 
    dataframe 
    
        a b c 
    1 0 Hi 1 
    2 1 Hi 1 
    3 0 Mom 1 
    4 0 Hi 1 
    5 1 Mom 0 
    
    1

    시뮬레이션 데이터 :

    data <- data.frame(matrix(ifelse(runif(40)>.5,"YES",letters[1:26]), 10, 4)) 
    

    것은 당신이 열 X2와 X4

    을 변경한다고 가정
    cols <- c("X2","X4") 
    data[,cols] <- apply(data[cols],2,function(x) ifelse(x=="YES",1,0)) 
    
    관련 문제