【问题标题】:R two dimensional array containing dataframe rowsR 包含数据帧行的二维数组
【发布时间】:2016-05-14 13:27:06
【问题描述】:

所以,我最近开始使用 R 进行我感兴趣的研究,并且我正在尝试创建一个包含数据帧行的多维数组。

我有一个包含许多列的大型数据框,这些列要么是数字,要么是字符串。为了简单起见,让我们使用 3 列: thread_id:1 到 10100 之间的整数。 user_id:给用户的整数。 post_name:一个字符串,为我们提供帖子的标题

我想创建一个数据结构,最好是一个二维数组,其中第一个维度是 thread_id,第二个维度是数据帧中的一行。

所以,作为对

的回归
DataSet[1][1], I'd get thread_id: 1, user_id: 100, post_name: "some name 1"
DataSet[1][2], I'd get thread_id: 1, user_id: 101, post_name: "some name 2"
DataSet[5][10], I'd get thread_id: 5, user_id: 900, post_name: "some name 3"

这可以在 R 中实现吗?我以前只有 Java 方面的经验,并且可以使用对象数组来解决。

感谢大家的帮助!

【问题讨论】:

  • 欢迎来到 SO。首先你应该阅读here关于如何提出一个好问题;一个好的问题有更好的变化需要解决,你会得到帮助。另一方面,阅读this 也不错。它解释了如何在 R 中创建一个可重现的示例。帮助用户通过为您的数据提供所需的输出以及您迄今为止尝试过的事情来帮助您。

标签: arrays r dataframe


【解决方案1】:

如果 thread_id 取值 1 到 5,您可以使用:

mylist <- list()
for(i in 1:5)
    mylist[[i]] <- myData[thread_id==i,]

您当然可以使用 max(myData$thread_id) 而不是 5...

【讨论】:

    【解决方案2】:

    这里有一个替代方案。

    假设:df 是一个 data.frame

    convert.to.str <- function(df){
        df_col <- names(df)
        val <- unlist(df)
    
        ans <- paste(df_col,val,sep=': ')
    
        final_ans <- paste(ans,collapse=', ')
    }
    
    int_ans <- data.frame(thread_id = df$thread_id, ans = apply(df,1,convert.to.str), nrow2=1:nrow(df))
    
    library(reshape2)
    
    int_ans2 <- dcast(int_ans,thread_id ~ nrow2,value.var='ans')
    
    DataSet <- int_ans2[2:ncol(int_ans2)]
    
    dimnames(DataSet)[[1]] <- int_ans2$thread_id
    

    【讨论】:

    • 嘿,谢谢分享!似乎对 int_ans 非常有效,尽管它仅在 int_ans2 处填充了 13 号(99 次 :D )。知道为什么会发生这种情况吗?我所做的只是将变量更改为我在程序中使用的名称。
    • @M.Küsz 可以分享一下你修改的代码吗?
    • @M.Küsz 代码似乎完全没问题。实际上,我无法识别您所说的错误。如果您能包含对数据集的一瞥以及您遇到的错误,我将不胜感激。
    • @M.Küsz 你能解释一下it only populated number 13 at int_ans2 (99 times :D)这行的意思吗?数字 13 在 int_ans2 的行名中出现了 99 次吗?
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2016-11-05
    • 2016-07-07
    • 2015-03-15
    • 2021-11-26
    相关资源
    最近更新 更多