我有一個看起來像這樣的df:
df <- data. frame("Logger" = c("119_1">。 "1", "2", "3", "119_2", "5", "6"。 "7", "119_3", "7", "8"。 "9"),
"Temp" =c (/span>4. 5, 5. 7, 3.8, 8. 9, 8.6, 10. 5, 11.0, 7. 8, 5.6, 7. 8, 9.9, 17. 3),
"RH" = c(/span>6. 5, 2. 7, 11.8, 4. 9, 3.6, 12. 5, 115.0, 3. 8, 9.6, 1. 8, 3.9, 5. 3))
但是,我想把變數 "Logger "的名字 "墊高",以便所有的數字都被最后一個名字取代,直到下一個。所以基本上我想要一個像這樣的輸出。
df_desired <- data. frame("Logger" = c("119_1">。 "119_1",/span>"119_1"。 "119_1",/span>"119_2"。 "119_2", "119_2", "119_2", "119_3", "119_3", "119_3", "119_3"),
"Temp" =c (/span>4. 5, 5. 7, 3.8, 8. 9, 8.6, 10. 5, 11.0, 7. 8, 5.6, 7. 8, 9.9, 17. 3),
"RH" = c(/span>6. 5, 2. 7, 11.8, 4. 9, 3.6, 12. 5, 115.0, 3. 8, 9.6, 1. 8, 3.9, 5. 3))
我如何做到這一點?我其實沒有什么頭緒。我知道padr包的存在,但我想它只適用于日期和NA。你們能不能幫我一下?非常感謝!! 謝謝你
uj5u.com熱心網友回復:
你可以用NA替換那些沒有_的值,然后使用fill。
library(dplyr)
library(tidyr)
df %>%。
mutate(Logger = replace(Logger, ! grepl('_', Logger)。 NA)) %> %
fill(Logger)
# Logger Temp RH
#1 119_1 4.5 6.5
#2 119_1 5.7 2.7
#3 119_1 3.8 11.8
#4 119_1 8.9 4.9
#5 119_2 8.6 3.6
#6 119_2 10.5 12.5[/span
#7 119_2 11.0 11.0
#8 119_2 7.8 3.8
#9 119_3 5.6 9.6
#10 119_3 7.8 1.8
#11 119_3 9.9 3.9
#12 119_3 17.3 5.3
uj5u.com熱心網友回復:
我們可以使用分組的方法,即根據'記錄儀'列中_的存在創建一個組,得到邏輯向量的累積總和,通過采取第一個元素更新'記錄儀',并取消分組
library(dplyr)
library(stringr)
df %>%。
group_by(grp = cumsum(str_detect(Logger, "_")) %> %
mutate(Logger = first(Logger)) %> %
ungroup %>%
select(-grp)
輸出
# A tibble: 12 x 3
記錄儀溫度RH
<chr> < dbl> <dbl>/span>
1 119_1 4.5 6.5
2 119_1 5.7 2.7
3 119_1 3.8 11.8
4 119_1 8.9 4.9
5 119_2 8.6 3.6
6 119_2 10.5 12.5
7 119_2 11 115
8 119_2 7.8 3.8
9 119_3 5.6 9.6
10 119_3 7.8 1.8
11 119_3 9.9 3.9
12 119_3 17.3 5.3
或者也可以使用na.locf,在replace后,用NA的元素進行替換。
library(zoo)
df %>%。
mutate(Logger = na.locf0(replace(Logger,)
str_detect(Logger, "_"。 否定 = TRUE)。 NA)))
輸出
Logger Temp RH
1 119_1 4.5 6.5
2 119_1 5.7 2.7
3 119_1 3.8 11.8
4 119_1 8.9 4.9
5 119_2 8.6 3.6
6 119_2 10.5 12.5
7 119_2 11.0 115.0
8 119_2 7.8 3.8
9 119_3 5.6 9.6
10 119_3 7.8 1.8
11 119_3 9.9 3.9
12 119_3 17.3 5.3
uj5u.com熱心網友回復:
你可以使用ave并通過cumsum(grepl("_", df$Logger))分組并回傳第一個元素。
df$Logger < - ave(df$logger, cumsum(grepl("_"。 df$Logger))。 FUN=function(x)x[1])
df
# Logger Temp RH
#1 119_1 4.5 6.5>
#2 119_1 5.7 2.7
#3 119_1 3.8 11.8
#4 119_1 8.9 4.9
#5 119_2 8.6 3.6
#6 119_2 10.5 12.5[/span
#7 119_2 11.0 11.0
#8 119_2 7.8 3.8
#9 119_3 5.6 9.6
#10 119_3 7.8 1.8
#11 119_3 9.9 3.9
#12 119_3 17.3 5.3
或者使用rep:
i < - grep("_", df$logger)
df$Logger < - rep(df$) operator">$Logger[i]。 diff(c(i。 1 nrow(df))))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/334044.html
標籤:
