将一个细胞分裂成不同的细胞
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])
出现错误:
Error in setNames(data.frame(t(test[, -1])), test[, 1]) :
'names' attribute [4] must be the same length as the vector [1]
使用:
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
没有额外包的解决方案:
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)
我已阅读 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]
使用:
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
没有额外包的解决方案:
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)