在R中使用grepl与ddply和transform
关于语法的快速问题。我有一个df,如下所示。我想确定一个人第一次得到苹果、猕猴桃或桔子的时间。为此,我使用以下代码创建了三个名为“apple1”、“kiwi1”和“orange1”的新变量:在R中使用grepl与ddply和transform,r,transform,plyr,grepl,R,Transform,Plyr,Grepl,关于语法的快速问题。我有一个df,如下所示。我想确定一个人第一次得到苹果、猕猴桃或桔子的时间。为此,我使用以下代码创建了三个名为“apple1”、“kiwi1”和“orange1”的新变量: ddply(z, "noms", transform, apple1 = as.numeric(!duplicated(fruits) & fruits == "apple"))->z 然而,我实际上想用grepl来识别我的水果,但无法让代码正常工作。这就是我尝试过的: ddply(z
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
答案如下:
z<-z[,apple20 := grepl('app.*?', fruits), by='noms']
zyou拥有grep
(返回整数向量)而不是grepl
(返回真/假值向量)。类似地,您正在使用&z[…]
,这可能会给您带来意外的结果,特别是当z
无法强制转换为真/假值时。@Ricardosporta感谢您提供的信息-但我已将grep更改为grepl,并且在data.frame(list)(noms=c(1L,1L,1L,1L),fruits=c)中仍然会出现相同的错误(2L,1L,:参数表示不同的行数:4,30“.z是DFT的名称错误告诉您,您正在尝试组合两个不同长度的布尔向量。我找到了它!我切换到使用data.table,因为我的df有超过100万行。下面是我如何做到的-ZT开始了!您确定您的逻辑吗?我不认为by
在这里完成了任何事情(结果方面)