2017-12-26 3 views
0

데이터를 다른 테이블로 요약하는 응용 프로그램에서 가져온 데이터가 Excel에 있습니다. Excel에서 데이터가 잘 보이지만 R로 가져 오려고하면 일부 열이 건너 뛰고 정렬되지 않습니다. 데이터를 정리할 수 있도록 데이터를 정리해야합니다.R 데이터 프레임에서 왼쪽으로 셀을 이동하십시오.

아래는 재현 가능한 샘플입니다. 다음은

df <- data.frame(` ` = c("cars","buses","","under 1yr","1-2 yrs","2-5 yrs",">5 yrs"), 
       fcltA = c("1","5","","","","",""), 
       ` ` = c("","","fcltA","5","","","1"), 
       fcltB = c("6","","","","","",""), 
       ` ` = c("","","fcltB","3","","2","1"), 
       fcltC = c("2","2","","","","",""), 
       ` ` = c("","","fcltC","1","2","","1"), 
check.names = FALSE, fix.empty.names = FALSE) 

내가 this 질문을 찾았지만 그것은 잘못된 컬럼에 어떤 값을 이동하기 때문에 내 문제에 대해 잘 작동하지 않습니다

dfClnd <- data.frame(` ` = c("cars","buses","","under 1yr","1-2 yrs","2-5 yrs",">5 yrs"), 
        fcltA = c("1","5"," fcltA","5","","","1"), 
        fcltB = c("3","3","fcltB","3","","2","1"), 
        fcltC = c("2","2","fcltC","1","2","","1"), 
        check.names = FALSE, fix.empty.names = FALSE) 

를 원하는 것입니다. 해결책은 를 사용하여

enter image description here

+1

는 이것이 인위적인 예를 들어 있다고 가정하고 기본이되는 스프레드 시트를 수정할 수없는 안전한가요? 귀하의 테이블은 디스플레이 용으로 만 사용되며 처리 용으로 만 사용되는 것은 아닙니다. 귀하가 의도하는 것이 바람직한 방향인지 확인하기 위해 일부 컨텍스트를 제공 할 수 있습니까? – r2evans

+0

Excel에서 데이터 그림을 추가했지만 열은 A에서 Z로 이동하지만 소수 열에 만 데이터가 있습니다. – user3357059

+0

더 강력한 접근 방식은 "너무 많은 것을 한번에"잡는 대신 스프레드 시트의 부분 집합을 포함하는 것이 좋습니다. 스프레드 시트에서 데이터를 가져 오는 데 사용하는 패키지는 무엇입니까? – r2evans

답변

0

: 아래

데이터가 같은 모양을 샘플입니다. df을 만들 때 factor 열을 만들지 않도록 stringsAsFactors = FALSE으로 설정합니다. 이는 coalesce 기능이 다른 요소 수준에서 작동하지 않기 때문입니다. df3이 최종 출력입니다.

library(dplyr) 
library(purrr) 

# Replace "" with NA 
df[df == ""] <- NA 

# Get the new column names  
NewCol <- names(df) 
NewCol <- NewCol[!NewCol %in% " "] 

# Conduct the merge of columns 
df2 <- map_dfc(NewCol, function(x){ 
    df_temp <- df[which(names(df) %in% x) + c(0, 1)] 
    df_out <- as_data_frame(coalesce(df_temp[, 1], df_temp[, 2])) %>% 
    setNames(x) 
    return(df_out) 
}) 

# Merge the first column with the new data frame 
# Replace NA with "" 
df3 <- bind_cols(df[, 1, drop = FALSE], df2) 
df3[is.na(df3)] <- "" 
df3 
#    fcltA fcltB fcltC 
# 1  cars  1  6  2 
# 2  buses  5   2 
# 3   fcltA fcltB fcltC 
# 4 under 1yr  5  3  1 
# 5 1-2 yrs     2 
# 6 2-5 yrs   2  
# 7 >5 yrs  1  1  1 

데이터

df <- data.frame(` ` = c("cars","buses","","under 1yr","1-2 yrs","2-5 yrs",">5 yrs"), 
        fcltA = c("1","5","","","","",""), 
        ` ` = c("","","fcltA","5","","","1"), 
        fcltB = c("6","","","","","",""), 
        ` ` = c("","","fcltB","3","","2","1"), 
        fcltC = c("2","2","","","","",""), 
        ` ` = c("","","fcltC","1","2","","1"), 
        check.names = FALSE, fix.empty.names = FALSE, 
        stringsAsFactors = FALSE) 
관련 문제