【问题标题】:Creating a data table from a two vectors of categories in R [duplicate]从R中的两个类别向量创建数据表[重复]
【发布时间】:2018-06-08 15:27:55
【问题描述】:

我想使用以下向量创建一个新数据表。我有两个表,一个包含 100 人的列表和一个包含 5 个测试的列表。我想合并这些表,但是,我希望每个科目的每个测试都有一行,所以在新表中我将有 500 行。我在下面使用了简化的示例。这是在R

person  <- data.frame(c("a", "b", "c", "d"))
test <- data.frame(c("1", "2", "3", "4", "5"))

我想像下面这样创建一个新表

person   test
 a          1  
 a          2
 a          3
 a          4
 a          5
 b          1
 b          2
 b          3
 b          4
 b          5

...等等。

我最初尝试加入,但没有可匹配的变量,也尝试粘贴但没有运气。我觉得我错过了一些东西,因为这听起来很简单。任何帮助将不胜感激!

【问题讨论】:

    标签: r dataframe merge data.table


    【解决方案1】:

    给你。

    expand.grid(person = c("a", "b", "c", "d"), 
                    test = c("1", "2", "3", "4", "5"))
    

    使它成为data.table()

    expand.grid(person = c("a", "b", "c", "d"), 
                test = c("1", "2", "3", "4", "5"))%>%
    data.table()
    

    这给出了人和测试之间所有可能的配对。

    这可能是某些帖子的重复。

    【讨论】:

    • 感谢您的回复,我收到一条错误警告消息:在 format.data.frame(x, digits = digits, na.encode = FALSE) 中:损坏的数据帧:列将被截断或用 NA 填充 >
    • 您应该能够将您的 data.frame 强制转换为 data.table()。我不知道为什么会出现这个警告
    【解决方案2】:

    我们也可以使用 包中的CJ。输出是data.table

    library(data.table)
    
    CJ(person[, 1], test[, 1])
    #     V1 V2
    #  1:  a  1
    #  2:  a  2
    #  3:  a  3
    #  4:  a  4
    #  5:  a  5
    #  6:  b  1
    #  7:  b  2
    #  8:  b  3
    #  9:  b  4
    # 10:  b  5
    # 11:  c  1
    # 12:  c  2
    # 13:  c  3
    # 14:  c  4
    # 15:  c  5
    # 16:  d  1
    # 17:  d  2
    # 18:  d  3
    # 19:  d  4
    # 20:  d  5
    

    【讨论】:

    • 感谢您的回复。我收到错误错误 Error in FUN(X[[i]], ...) : Invalid column: 它有尺寸。无法格式化。如果是 data.table(table()) 的结果,请改用 as.data.table(table())。我的列是否需要为特定类型?我的测试应该是我认为的因素,但我的人员列应该采用什么格式?
    • 请确保代码适用于您的示例数据框persontest。如果可行,请确保您的真实数据框与您提供的 persontest 数据框相似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2018-09-13
    • 1970-01-01
    • 2022-08-11
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多