R - 使用列表名称列出 data.frame

标签 r dataframe

所以我有这个 list :

structure(list(scaf = structure(1L, .Label = "HE638", class = "factor"), 
    pos = 8L, scaf = structure(1L, .Label = "HE638", class = "factor"), 
    pos = 8L, scaf = structure(1L, .Label = "HE638", class = "factor"), 
    pos = 8L), .Names = c("scaf", "pos", "scaf", "pos", "scaf", 
"pos"))

我想得到一个 data.frame 以便两列是 scafpos
这是我得到的:
do.call(rbind, poor.loci)

想要的结果:
scaf     pos
HE638    8
HE638    8
HE638    8

最佳答案

以下是三个可供考虑的选项:

选项 1

直接选择所有其他元素并手动创建您的 data.frame .

setNames(
  data.frame(unlist(poor.loci[c(TRUE, FALSE)], use.names = FALSE),
             unlist(poor.loci[c(FALSE, TRUE)], use.names = FALSE)),
  unique(names(poor.loci)))
#    scaf pos
# 1 HE638   8
# 2 HE638   8
# 3 HE638   8

选项 2

转换您的 list成“长”data.framereshape它变成你想要的形式。也可以使用 melt 使用“reshape2”包来完成和 dcast而不是 stackreshape .
X <- stack(lapply(poor.loci, as.character))
X$ID <- ave(X$values, X$values, FUN = seq_along)
reshape(X, direction = "wide", idvar="ID", timevar="ind")
#   ID values.scaf values.pos
# 1  1       HE638          8
# 3  2       HE638          8
# 5  3       HE638          8

选项 3

重新安排您的 list并转换重新排列的 listdata.frame :
A <- unique(names(poor.loci))
data.frame(
  setNames(
    lapply(A, function(x) unlist(poor.loci[names(poor.loci) %in% x], 
                                 use.names = FALSE)), A))

关于R - 使用列表名称列出 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291468/

相关文章:

r - 如何使用 for 循环创建向量

r - 合并数据框中的重复行并创建新列

Python 对 0 级列执行自定义计算

python - 如何使用过滤器获取python数据框列名

dataframe - Spark SQL 1.6.0 - 简单查询的大量内存使用

json - 如何将数据框转换为自定义 json 格式

javascript - 将 onRender() 函数中创建的对象保存在 htmlWidgets 中

r - 按行而不是列进行数组/矩阵比较

python - 如何在 Pandas 数据框中切换列行

python - 如何从 Pandas 数据框中的另一列所有值和聚合中的另一列创建新列名称?