Используйте RegexOptions.Singleline, он меняет значение. включить новые строки
Regex.Replace (content, searchText, replaceText, RegexOptions.Singleline);
После группировки «Gill» подмножество «Время», где «Diametre» не равно 0 и получает значение max
(если «время» - numeric
класс)
library(dplyr)
df1 %>%
group_by(Gill) %>%
summarise(Time = max(Time[Diametre != 0]))
Здесь вы можете использовать aggregate
:
> df<- data.frame(
Gill = rep(1:11, each = 2),
diameter = c(0,0,1,0,0,0,73.36, 80.08,1,25.2,53.48,61.21,28.8,28.66,71.2,80.25,44.55,53.50,60.91,0,11,74.22),
time = 0.16
)
> df
Gill diameter time
1 1 0.00 0.16
2 1 0.00 0.16
3 2 1.00 0.16
4 2 0.00 0.16
5 3 0.00 0.16
6 3 0.00 0.16
7 4 73.36 0.16
8 4 80.08 0.16
9 5 1.00 0.16
10 5 25.20 0.16
11 6 53.48 0.16
12 6 61.21 0.16
13 7 28.80 0.16
14 7 28.66 0.16
15 8 71.20 0.16
16 8 80.25 0.16
17 9 44.55 0.16
18 9 53.50 0.16
19 10 60.91 0.16
20 10 0.00 0.16
21 11 11.00 0.16
22 11 74.22 0.16
> # Remove diameter == 0 before aggregate
> dfnew <- df[df$diameter != 0, ]
> aggregate(dfnew$time, list(dfnew$Gill), max )
Group.1 x
1 2 0.16
2 4 0.16
3 5 0.16
4 6 0.16
5 7 0.16
6 8 0.16
7 9 0.16
8 10 0.16
9 11 0.16
Я бы использовал другой подход, чем элегантное решение, предлагаемое акроном. Я знаю, как использовать этот метод для создания столбца MaxTime, который вы показываете на своем изображении.
#This will split your df into a list of data frames for each gill.
list.df <- split(df1, df1$Gill)
Затем вы можете использовать lapply, чтобы найти максимальное время для каждого Gill, а затем сделать это значение новым столбец MaxTime.
lapply(list.df, function(x) mutate(x, MaxTime = max(x$Time[x$Diametre != 0])))
Затем вы можете объединить эти разделенные данные с помощью bind_rows ()
df1 = bind_rows(list.df)