2017-06-02 40 views
1

我已閱讀CSV文件,該文件包含以下格式的數據:夾板一個小區不同的小區

A 0.1 
B 0.2 
C .1,.2,.4,.6 
D .1,.2,.4,.6 
E 0.2 

我要將此像:

A B C D E 
0.1 0.2 0.1 0.1 0.2 
     0.2 0.2 
     0.4 0.4 
     0.6 0.6 

我使用代碼:

test <- read.csv("test.csv") 

test_t <- setNames(data.frame(t(test[,-1])), test[,1]) 

這是給錯誤:

Error in setNames(data.frame(t(test[, -1])), test[, 1]) :
'names' attribute [4] must be the same length as the vector [1]

回答

2

使用:

library(splitstackshape) 
dcast(cSplit(df, 'V2', ',','long'), rowid(V1) ~ V1)[,-1] 

給出:

 A B C D E 
1: 0.1 0.2 0.1 0.1 0.2 
2: NA NA 0.2 0.2 NA 
3: NA NA 0.4 0.4 NA 
4: NA NA 0.6 0.6 NA 

無需額外的軟件包:A液

splt <- strsplit(as.character(df$V2),',') 
df2 <- data.frame(V1 = rep(df$V1, lengths(splt)), 
        V2 = as.numeric(unlist(splt)), 
        id = unlist(lapply(splt, seq_along))) 

df3 <- reshape(df2, idvar = 'id', timevar = 'V1', direction = 'wide') 

這給了類似的結果:

> df3 
    V2.A V2.B V2.C V2.D V2.E 
1 0.1 0.2 0.1 0.1 0.2 
4 NA NA 0.2 0.2 NA 
5 NA NA 0.4 0.4 NA 
6 NA NA 0.6 0.6 NA 

如果你想獲得完全相同的列名作爲第一個解決方案:

names(df3) <- gsub('V2.', '', names(df3), fixed = TRUE) 
+0

感謝夏侯,但我應該提到,我將使用此代碼rengine API,所有的圖書館是不可用的,所以尋找解決方案時沒有任何額外的圖書館,雖然我可以使用plyr,動物園或重塑這些圖書館可用。 –

+0

@AnuragSharma添加了完整的基礎R解決方案 – Jaap

+0

感謝Jaap,這正是我想要的。 –