【发布时间】:2014-02-25 07:19:31
【问题描述】:
我有一些看起来像这样的数据(例如假数据):
dressId color
6 yellow
9 red
10 green
10 purple
10 yellow
12 purple
12 red
其中颜色是因子向量。不能保证该因子的所有可能级别都实际出现在数据中(例如,颜色“蓝色”也可能是级别之一)。
我需要一个向量列表,对每件衣服的可用颜色进行分组:
[[1]]
yellow
[[2]]
red
[[3]]
green purple yellow
[[4]]
purple red
保留裙子的 ID 会很好(例如,一个数据框,此列表是第二列,ID 是第一列),但不是必需的。
我写了一个循环,它遍历数据帧的每一行,当下一个 ID 相同时,它将颜色添加到向量中。 (我确信数据是按 ID 排序的)。当第一列中的 ID 发生变化时,它会将向量添加到列表中:
result <- NULL
while(blah blah)
{
some code which creates the vector called "colors"
result[[dressCounter]] <- colors
dressCounter <- dressCounter + 1
}
在努力使所有必要的计数变量都正确之后,我沮丧地发现它不起作用。第一次,colors是
[1] yellow
Levels: green yellow purple red blue
它被强制转换成一个整数,所以result 变成了2。
在第二次循环重复中,colors 只包含红色,result 变成了一个简单的整数向量,[1] 2 4。
在第三次重复中,colors 现在是一个向量,
[1] green purple yellow
Levels: green yellow purple red blue
我得到了
result[[3]] <- colors
结果错误[[3]] 提供的元素多于替换的元素
我做错了什么?有没有办法初始化result,所以它不会被转换为数字向量,而是成为向量列表?
另外,除了“自己动手”之外,还有其他方法可以做到这一点吗?
【问题讨论】: