[英]Splinting one cell to different cells
我已读取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])
这给出了错误:
setNames(data.frame(t(test [,-1])),test [,1])中的错误:
“名称”属性[4]的长度必须与矢量[1]的长度相同
使用:
library(splitstackshape)
dcast(cSplit(df, 'V2', ',','long'), rowid(V1) ~ V1)[,-1]
得到:
ABCDE 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
没有额外包装的解决方案:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.