我试图将一系列数字拆分成数字。我使用strsplit分割了数字。分割后我拥有的数据集就像 -
strings <- c("001", "002", "003", "004")
dataset <- strsplit(strings, split="")
dataset
[[1]]
[1] "0" "0" "1"
[[2]]
[1] "0" "0" "2"
[[3]]
[1] "0" "0" "3"
[[4]]
[1] "0" "0" "4"
现在,我想将它放入一个数据框中,以便每个数字都在一个单独的列中,用于数组中的所有值。 像这样 -
## V1 V2 V3
## 0 0 1
## 0 0 2
## .
## .
有任何建议怎么做?
答案 0 :(得分:2)
您可以使用ldply
包
plyr
library(plyr)
ldply(strsplit(as.character(dataset),split=""))
## V1 V2 V3
## 1 0 0 1
## 2 0 0 2
## 3 0 0 3
## 4 0 0 4
## 5 0 0 5
## 6 0 0 6
## 7 0 0 7
## 8 0 0 8
## 9 0 0 9
## 10 0 1 0
## 11 0 1 1
## 12 0 1 2
## 13 0 1 3
答案 1 :(得分:1)
应该这样做......
as.data.frame(do.call(rbind, dataset))
...如果所有字符串长度相同。
如果没有,事情变得有点棘手,但这应该做到:
do.call(
plyr::rbind.fill,
lapply(
dataset,
function(x){as.data.frame(t(cbind(x)))}
)
)
或
library(plyr
do.call(
rbind.fill,
lapply(
dataset,
function(x){as.data.frame(t(cbind(x)))}
)
)
如果plyr不是一个选项,可以制作自己的rbind-fill版本......
#' function for binding data.frames even if names do not match
#' @param df1 first data.frame to rbind
#' @param df2 second data.frame to rbind
#' @keywords internal
rbind_fill <- function(df1=data.frame(), df2=data.frame()){
names_df <- c(names(df1), names(df2))
if( dim(df1)[1] > 0 ){
df1[, names_df[!(names_df %in% names(df1))]] <- rep(NA, dim(df1)[1])
}else{
df1 <- data.frame()
}
if( dim(df2)[1] > 0 ){
df2[, names_df[!(names_df %in% names(df2))]] <- rep(NA, dim(df2)[1])
}else{
df2 <- data.frame()
}
rbind(df1, df2)
}
do.call(
rbind_fill,
lapply(
dataset,
function(x){as.data.frame(t(cbind(x)))}
)
)