如何在R长度不等的情况下将向量转换为矩阵

时间:2018-02-02 17:22:28

标签: r data-cleaning

我的矢量具有以下结构。名称为def has_attr?(a)的向量是单元格def has_attr(a)?"data_1"等之间的数字

"data_1"

我想像这样创建数据帧DF。因此每个向量都在单独的数据框中。

"data_2"

fast 的方法是什么?我有400万条记录,因此row name cell meaning 1 data_1 2 3.4 3 2.3 ... ... 40 data_2 41 12 ... ... 60 data_3 61 63.2 ... ... 这样的传统循环太慢了。谢谢。

1 个答案:

答案 0 :(得分:0)

你的意思是这样吗?

library(zoo)

#split dataframe in list of values
df_list <- split(df, na.locf(sapply(df$cell_meaning, function(x) ifelse(grepl("[0-9]+\\.?[0-9]+",x),
                                                             NA,
                                                             which(df$cell_meaning==x)))))
names(df_list) <- NULL

#remove data_*
final_list <- lapply(df_list, `[`, -1,)

#final output
final_list
final_list[1]

输出是:

> final_list
[[1]]
[1] "3.4" "2.3"

[[2]]
[1] "12"

[[3]]
[1] "63.2"


> final_list[1]
[[1]]
[1] "3.4" "2.3"

示例数据:

df <- structure(list(cell_meaning = c("data_1", "3.4", "2.3", "data_2", 
"12", "data_3", "63.2")), .Names = "cell_meaning", class = "data.frame", row.names = c(NA, 
-7L))