2017-12-26 21 views
0

Excelのデータは、そのデータを別のテーブルに要約するアプリケーションから得ています。データはExcelではうまく見えますが、Rにインポートしようとすると、一部の列がスキップされて配置されません。私はそれをプロットできるようにデータを整理する必要があります。セルをR data.frameの左にシフトします

以下は再現可能なサンプルです。以下は

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と設定していることに注意してください。これは、​​3210関数が異なる因子レベルで機能しないためです。 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 

DATA

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) 
関連する問題