我正在為 R 中的 ifelse 陳述句苦苦掙扎。我有一個包含 64 列和 12861 行的資料框。我需要將日期范圍內的 10 列(日期是一列)并基于另一行中的值 (tdiff) 相乘,并用資料框中的新值替換舊值。這行代碼生成一個 12681 X 12681 的資料框。它應該是 12681(行)乘以 64(列)的原始大小。我究竟做錯了什么?先感謝您!
test<-data.frame(ifelse(slopejoin$tdiff==2 & slopejoin$date>="2021-01-30" & slopejoin$date<="2021-08-08",
slopejoin[,c("a_Pinene","Isoprene","Methyl_Vinyl_Ketone","Nopinone","Benzene_", "D_Limonene",
"Sabinene","a_Cedrene","Pentane","Hexane")]*0.85,
slopejoin[,c("a_Pinene","Isoprene","Methyl_Vinyl_Ketone", "Nopinone","Benzene_", "D_Limonene",
"Sabinene","a_Cedrene","Pentane","Hexane")]))
編輯:我接受了第一個評論者的建議,但想再添加一個條件,但收到一個錯誤:“ cols &lopejoin$substr != z 中的錯誤:操作僅適用于數字、邏輯或復雜型別。” 這是我正在使用的代碼:
cols <- c("a_Pinene","Isoprene","Methyl_Vinyl_Ketone", "Nopinone","Benzene_", "D_Limonene", "Sabinene","a_Cedrene","Pentane","Hexane")
x <- "2021-01-06"
y <- "2021-08-08"
z <- 'zero_VOC_2'
slopejoin[slopejoin$tdiff == 2 & slopejoin$date >= x & slopejoin$date <= y,cols & slopejoin$substr != z] <- slopejoin[slopejoin$tdiff == 2 & slopejoin$date >= x & slopejoin$date <= y,cols & slopejoin$substr != z] * 0.06
不太確定錯誤來自哪里。首先,我在考慮一個類問題,但似乎所有條件都使用字符類進行了檢查。我嘗試將“zero_VOC_2”的所有實體更改為 as.numeric(1) 或 TRUE 并檢查條件中的那些但無濟于事。感謝任何幫助!
uj5u.com熱心網友回復:
cols <- "a_Pinene","Isoprene","Methyl_Vinyl_Ketone", "Nopinone","Benzene_", "D_Limonene", "Sabinene","a_Cedrene","Pentane","Hexane")
x <- "2021-01-30"
y <- "2021-08-08"
# Replace values in original fields
slopejoin[slopejoin$tdiff == 2 & slopejoin$date >= x & slopejoin$date <= y,cols] <- slopejoin[slopejoin$tdiff == 2 & slopejoin$date >= x & slopejoin$date <= y,cols] * 0.85
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335813.html
下一篇:如何條件物件屬性的不等式
