【发布时间】:2014-04-30 09:04:03
【问题描述】:
关于我认为的语法的快速问题。我有一个 df,如下所示。我想确定一个人第一次得到苹果、猕猴桃或橙子的时间。为此,我使用以下代码创建了三个名为“apple1”、“kiwi1”和“orange1”的新变量:
ddply(z, "noms", transform,
apple1 = as.numeric(!duplicated(fruits) & fruits == "apple"))->z
但是,我实际上想使用 grepl 来识别我的水果,但无法使代码正常工作。这是我尝试过的:
ddply(z, "noms", transform,
apple20 = as.numeric(!duplicated(fruits) & z[grep('^app.*?', z$fruits),]))->z
ddply(z, "noms", transform,
apple20 = as.numeric(!duplicated(fruits) & grep('^app.*?', z$fruits)))->z
如果有人能指出我在这里出错的地方,那就太好了。谢谢!
样本 DF
noms fruits kiwi1 orange1 apple1
1 john banana 0 0 0
2 john apple 0 0 1
3 john apple 0 0 0
4 john apple 0 0 0
5 lucy kiwi 1 0 0
6 lucy orange 0 1 0
7 lucy apple 0 0 1
8 lucy berry 0 0 0
9 mary apple 0 0 1
10 mary grape 0 0 0
11 mary orange 0 1 0
12 mary apple 0 0 0
13 tom orange 0 1 0
【问题讨论】:
-
你有
grep(它返回一个整数向量)而不是grepl(它返回一个 TRUE / FALSE 值的向量)。同样,您正在使用& z[..],这可能会给您带来意想不到的结果,尤其是如果z不能被强制转换为 TRUE/FALSE 值。 -
@RicardoSaporta 感谢您提供的信息 - 但我已将 grep 更改为 grepl 并且我仍然收到相同的错误“data.frame 中的错误(list(noms = c(1L, 1L, 1L, 1L), fruits = c(2L, 1L, : 参数暗示不同的行数:4, 30"。z 是 df 的名称
-
错误告诉你你正在尝试组合两个不同长度的布尔向量
-
想通了!我切换到使用 data.table,因为我的 df 有 >100 万行。所以这就是我的做法 - z
-
你去!你确定你的逻辑吗?我不认为
by在这里完成任何事情(结果明智)