Как я могу использовать строки внутри функций ddply? - PullRequest
0 голосов
/ 22 мая 2018

Просто в качестве иллюстративного примера, чтобы создать функцию, подобную countif в Excel, вот что я пытался каким-то образом использовать строку «mycolumn» в определении переменной «ddply« countif »ниже:

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, но мне нужен способ использовать мою строку mycolumn в функции ddply вместо того, чтобы полагаться только на 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 голосов
/ 22 мая 2018

ОК, я нашел способ.Не так элегантно, я думаю, но кого это волнует:

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) также будет работать нормально

0 голосов
/ 22 мая 2018

не совсем уверен, получу ли я то, что вам нужно, но мое лучшее предположение будет примерно таким:

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()

Вы можете поэкспериментировать с условной функцией фильтра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...