正如一个说明性示例,要在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
答案 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)也可以正常工作