2017-06-02 13 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,这正是我想要的。 –