【问题标题】:how to turn vectors to matrix in R with unequal length如何将向量转换为R中长度不等的矩阵
【发布时间】:2018-02-03 03:51:07
【问题描述】:

我有如下结构的向量。名称为"data_1" 的向量是单元格"data_1""data_2" 之间的数字等

row name   cell meaning
1           data_1
2           3.4
3           2.3
...         ...
40          data_2
41          12
...         ...
60          data_3
61          63.2
...         ...

我想像这样创建数据框 DF 数组。所以每个向量都在单独的数据框中。

DF[1] 
3.4
2.3
...

DF[2]  
12
...

DF[3]  
63.2
...

快速的方法是什么?我有 400 万条记录,所以像 for(i in 1:nrow) 这样的传统周期太慢了。谢谢。

【问题讨论】:

  • 你的数据结构不清楚。请使用dput(df) 的输出编辑问题。或者,如果dput(head(df, 20)) 的输出太长。 (df 是您的数据名称。)

标签: r data-cleaning


【解决方案1】:

你的意思是这样的吗?

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))

【讨论】:

  • @AnnaK 如果它可以帮助您解决问题,也许您应该accept the answer,以便可以认为问题已关闭。
  • 答案可能不错,但运行时间太长。我最终做了其他事情。
  • 哦,你找到了一个有效的解决方案真是太好了。您可能希望将您的解决方案作为答案发布为他人的利益:)
猜你喜欢
  • 2013-01-14
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2018-07-17
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多