我試圖實現類似於this和this問題的類似問題,但不是用單個值替換,而是基於另一列替換。R:用另一列中的值替換多列數據幀中的多個值
的數據是從具有特定的網站「是」的時候被採取的具體日期測量,我現在想的河上的那些特定日期的水位。我的數據看起來是這樣的(但有更多的地點和日期):
date <- c('2000-01-01','2000-01-02','2000-01-03','2000-01-04','2000-01-05','2000-01-06','2000-01-07','2000-01-08','2000-01-09','2000-01-10')
date <- as.Date(date)
Site1 <- c('yes','','yes','','yes','','yes','','','')
Site2 <- c('yes','yes','yes','','','','','yes','','yes')
Site3 <- c('','','','','','','yes','yes','','yes')
waterlevel <- c(24,58,2,38,18,59,20,98,16,88)
df <- data.frame(date,Site1,Site2,Site3,waterlevel)
這給出了這樣的數據幀:
date Site1 Site2 Site3 waterlevel
1 2000-01-01 yes yes 24
2 2000-01-02 yes 58
3 2000-01-03 yes yes 2
4 2000-01-04 38
5 2000-01-05 yes 18
6 2000-01-06 59
7 2000-01-07 yes yes 20
8 2000-01-08 yes yes 98
9 2000-01-09 16
10 2000-01-10 yes yes 88
,我想輸出數據框,看起來像這樣:
date Site1 Site2 Site3 waterlevel
1 2000-01-01 24 24 24
2 2000-01-02 58 58
3 2000-01-03 2 2 2
4 2000-01-04 38
5 2000-01-05 18 18
6 2000-01-06 59
7 2000-01-07 20 20 20
8 2000-01-08 98 98 98
9 2000-01-09 16
10 2000-01-10 88 88 88
我已經嘗試使用上述問題的解決方案代碼與一個不同的數據框中的水位匹配參數,但解決方案沒有工作:
sel <- grepl("Site",names(df))
df[sel] <- lapply(df[sel], function(x) replace(x,x %in% 2:4, df2$waterlevel[match(df$date,df2$date)]))
任何幫助將非常感激。
@PierreLafortune爲什麼你想將這些列到類'character'? – Roland
但是NA更有意義。 –