【问题标题】:Return list of factorial row combinations using 2 factors in R使用 R 中的 2 个因子返回因子行组合列表
【发布时间】:2018-01-07 22:35:15
【问题描述】:

我有一个数据集,其中包含两个识别因素,Day (A-D) 和 tTime(因素 1-4),以及三个数字变量。我想返回一个列表,其中包含包含每个因素之一的行的每个组合,

例如。列表中的第一项将是 4 行,它们具有 Day x tTime 因子组合 A-1、B-1、C-1、D-1。条目二是 A-2、B-1、C-1、D-1...等的 4 行,最终生成一个包含 256 个条目的列表(我认为... 4*4*4*4?) .

我已经对此进行了一些工作/搜索,但我对编程和 R 非常陌生,因此没有任何尝试接近于发布的尝试。

样本数据集:

testData <- data.frame(Day = rep(c("A", "B", "C", "D"), 4),
                       tTime = factor(rep(1:4, rep(4,4))),
                       numDat1 = rnorm(16, mean = 3, sd = 5),
                       numDat2 = rnorm(16, mean = 1, sd = 10),
                       numDat3 = rnorm(16, mean = 10, sd = 3))

【问题讨论】:

  • 您希望numDatx 变量包含在这些列表中吗?
  • 是的,认为 expand.grid 可能是一个选项,但似乎不会返回其他变量

标签: r loops combinations apply


【解决方案1】:

这很直接。我确实想知道为什么您想要所有这些重复的数据 - 无论您在做什么,都可能有一种更有效的方法(也许制作一个行索引列表并根据需要使用每个子集?)

如果您的真实数据更大,我建议切换到data.table - 使用键控数据表,merge 步骤将快得多

x = expand.grid(A=1:4, B = 1:4, C = 1:4, D = 1:4)

result = apply(x, 1, function(r) data.frame(Day = c("A", "B", "C", "D"), tTime = r))
result = lapply(result, merge, testData)
result
# [[1]]
#   Day tTime   numDat1     numDat2   numDat3
# 1   A     1 -8.939716 -20.4731248 12.617296
# 2   B     1  8.992376  -0.2803529  8.524298
# 3   C     1  7.920297   1.2573052  7.072502
# 4   D     1 10.577459  15.9311881 13.875922
# 
# [[2]]
#   Day tTime   numDat1    numDat2   numDat3
# 1   A     2  9.689634  2.5874269  7.624269
# 2   B     1  8.992376 -0.2803529  8.524298
# 3   C     1  7.920297  1.2573052  7.072502
# 4   D     1 10.577459 15.9311881 13.875922
# 
# [[3]]
#   Day tTime   numDat1     numDat2   numDat3
# 1   A     3  6.210782 -10.5826679  7.526498
# 2   B     1  8.992376  -0.2803529  8.524298
# 3   C     1  7.920297   1.2573052  7.072502
# 4   D     1 10.577459  15.9311881 13.875922
# 
# [[4]]
#   Day tTime   numDat1    numDat2   numDat3
# 1   A     4  7.552972 10.5035948  7.999910
# 2   B     1  8.992376 -0.2803529  8.524298
# 3   C     1  7.920297  1.2573052  7.072502
# 4   D     1 10.577459 15.9311881 13.875922
# 
# [[5]]
#   Day tTime   numDat1    numDat2   numDat3
# 1   A     1 -8.939716 -20.473125 12.617296
# 2   B     2 -4.883532   6.526018 11.959817
# 3   C     1  7.920297   1.257305  7.072502
# 4   D     1 10.577459  15.931188 13.875922
# 
# [[6]]
#   Day tTime   numDat1   numDat2   numDat3
# 1   A     2  9.689634  2.587427  7.624269
# 2   B     2 -4.883532  6.526018 11.959817
# 3   C     1  7.920297  1.257305  7.072502
# 4   D     1 10.577459 15.931188 13.875922

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多