我有一个包含两个识别因子的数据集,Day(A-D)和tTime(因子1-4),以及三个数字变量。我想返回一个列表,其中包含包含每个因子之一的每个行组合
实施例。列表中的条目1将是具有Day x tTime因子组合A-1,B-1,C-1,D-1的4行。第二项是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))
答案 0 :(得分: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