<\s*(\w+)[^/>]*>
Объясненные детали:
<
: начальный символ
\s*
: он может иметь пробелы перед именем тега (уродливым, но возможным).
(\w+)
: теги могут содержать буквы и цифры (h1). Ну,\w
также соответствует «_», но это не мешает, я думаю. Если любопытное использование ([a-zA-Z0-9] +).
[^/>]*
: все, кроме>
и/
, до закрытия>
>
: закрытие>
UNRELATED
И для парней, которые недооценивают регулярные выражения, говоря, что они только настолько сильны, как обычные языки:
anbanban, который не является регулярный и даже контекстно-свободный, можно сопоставить с
^(a+)b\1b\1$
Обратное обращение FTW !
Существует также df2 <- count(x, c('Year','Month'))
(пакет plyr)
Следуя предложению Джошуа, вы можете подсчитать количество наблюдений в вашем фрейме df
, где Year
= 2007 и Month
= Nov (если они столбцы):
nrow(df[,df$YEAR == 2007 & df$Month == "Nov"])
и с aggregate
, следуя @GregSnow:
aggregate(x ~ Year + Month, data = df, FUN = length)
Альтернативой функции aggregate()
в этом случае будет table()
с as.data.frame()
, что также укажет, какие комбинации Год и Месяц связаны с нулевыми вхождениями
df<-data.frame(x=rep(1:6,rep(c(1,2,3),2)),year=1993:2004,month=c(1,1:11))
myAns<-as.data.frame(table(df[,c("year","month")]))
И без нулевых комбинаций
myAns[which(myAns$Freq>0),]
Создайте новую переменную Count
со значением 1 для каждой строки:
df1["Count"] <-1
Затем скомпилируйте фрейм данных, суммируя по столбцу Count
:
df2 <- aggregate(df1[c("Count")], by=list(year=df1$year, month=df1$month), FUN=sum, na.rm=TRUE)
Простой вариант использования с aggregate
- это функция length
, которая даст вам длину вектора в подмножестве. Иногда немного более надежным является использование function(x) sum( !is.na(x) )
.
Мы также можем использовать dplyr
.
Во-первых, некоторые данные:
df <- data.frame(x = rep(1:6, rep(c(1, 2, 3), 2)), year = 1993:2004, month = c(1, 1:11))
Теперь число:
library(dplyr)
count(df, year, month)
#piping
df %>% count(year, month)
Мы также можем используйте немного более длинную версию с трубкой и функцию n()
:
df %>%
group_by(year, month) %>%
summarise(number = n())
или функцию `tally:
df %>%
group_by(year, month) %>%
tally()
Решение sql с использованием пакета sqldf
:
library(sqldf)
sqldf("SELECT Year, Month, COUNT(*) as Freq
FROM df1
GROUP BY Year, Month")
Для моих скоплений я обычно получаю желание видеть среднее и «насколько велика эта группа» (длина a.k.a.). Так что это мой удобный фрагмент для этих случаев:
agg.mean <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="mean")
agg.count <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="length")
aggcount <- agg.count$columnToMean
agg <- cbind(aggcount, agg.mean)
Старый вопрос без решения data.table
. Итак, здесь идет ...
Используя .N
library(data.table)
DT <- data.table(df)
DT[, .N, by = list(year, month)]
lw<- function(x){length(which(df$variable==someValue))}
agg<- aggregate(Var1~Var2+Var3, data=df, FUN=lw)
names(agg)<- c("Some", "Pretty", "Names", "Here")
View(agg)
Учитывая ответ @Ben, R выдает ошибку, если df1
не содержит столбец x
. Но это можно решить элегантно с помощью paste
:
aggregate(paste(Year, Month) ~ Year + Month, data = df1, FUN = NROW)
Аналогичным образом его можно обобщить, если в группировке используется более двух переменных:
aggregate(paste(Year, Month, Day) ~ Year + Month + Day, data = df1, FUN = NROW)
cbind
получил результатыaggregate(Sepal.Length ~ Species, iris, mean)
иaggregate(Sepal.Length ~ Species, iris, length)
– geotheory 16 May 2015 в 22:28df %>% group_by(group, variable) %>% mutate(count = n())
– Manoj Kumar 14 December 2016 в 18:57