【发布时间】:2016-06-02 10:18:58
【问题描述】:
我有一个数据框,其中每个 Item 具有三个类别(a、b、c),并且记录了每个类别的数字 Answer(0 或 1) .我想根据 Answer 列中的行创建一个新列。这是我的数据框的样子:
Item <- rep(c(1:3), each=3)
Option <- rep(c('a','b','c'), times=3)
Answer <- c(1,1,0,1,0,1,1,1,1)
df <- data.frame(Item, Option, Answer)
Item Option Answer
1 1 a 1
2 1 b 1
3 1 c 0
4 2 a 0
5 2 b 0
6 2 c 1
7 3 a 1
8 3 b 1
9 3 c 1
需要什么:当 Option 列中的三个类别为 1 时,New 列应该得到 1。在任何其他情况下,列应该有0. 想要的输出应该是这样的:
Item Option Answer New
1 1 a 1 0
2 1 b 1 0
3 1 c 0 0
4 2 a 0 0
5 2 b 0 0
6 2 c 1 0
7 3 a 1 1
8 3 b 1 1
9 3 c 1 1
我试图在不使用循环的情况下实现这一点,但我卡住了,因为我不知道如何根据一组行而不是单个行来创建一个新列。我试过this solution,但如果行没有成对分组,它就不起作用。
你有什么建议吗?非常感谢!
【问题讨论】:
-
对于每个“项目”使用相同数量的“选项”,您可以考虑将数据存储在像
xtabs(Answer ~ Item + Option, df)这样的“矩阵”中(并且“答案”为 0/1,您可以将其存储为稀疏的“矩阵”)。然后,例如,您可以使用colSums来计算 "1"s