如何在ddply函数中使用字符串?

时间:2018-05-22 12:39:13

标签: r dplyr

正如一个说明性示例,要在excel中创建类似于countif的函数,这里是我试图以某种方式在ddply“countif”变量定义中使用字符串“mycolumn”:

df <- c("a","a","b","c","c") %>% data.frame(stringsAsFactors = F)
colnames(df) <- "mycolumn"
x <- "mycolumn"
countif <- function(df,x ) {
y <- which(colnames(df)==x)
result1 <- ddply(df,x,nrow) #this works, but I can't use the x argument
result2 <- ddply(df,x,summarise, countif=length(df[,y])) #not working
result3 <- ddply(df,x,summarise, countif=length(parse(text=x))) #not working
    }

如下所示,只有result1有效,但我需要一种方法可以在ddply函数中使用我的mycolumn字符串,而不是仅仅依赖nrow。非常感谢。

> result1
  mycolumn V1
1        a  2
2        b  1
3        c  2
> result2
  mycolumn countif
1        a       5
2        b       5
3        c       5
> result3
  mycolumn countif
1        a       1
2        b       1
3        c       1

2 个答案:

答案 0 :(得分:1)

不完全确定我是否得到了你之后的内容,但我最好的猜测就是下面的内容

library(dplyr)

df <-  data.frame(mycolumn = c("a","a","b","c","c"))

result1 <- df %>% group_by(mycolumn) %>% tally()

result3 <- df %>% filter(mycolumn %in% c("a", "b")) %>% group_by(mycolumn) %>% tally()

您可以使用过滤器功能中的条件

答案 1 :(得分:-1)

好的,我找到了办法。我猜不是那么优雅,但是谁在乎:

countif <- function(df,x ) {
df$myartificialname <- df[,which(colnames(df)==x)]
result <- ddply(df,x,summarise,countif=length(myartificialname) )
print(paste(length(unique(result$countif)), "levels counted:", toString(head(unique(result$countif)))))
return(result$countif)
}

编辑:实际上get(x)也可以正常工作