【发布时间】:2021-12-09 09:43:56
【问题描述】:
我正在为 R 中的 ifelse 语句而苦苦挣扎。我有一个包含 64 列和 12861 行的数据框。我需要在一个日期范围内(日期是一列)和基于另一行(tdiff)中的值相乘这些列中的 10 个,并将旧值替换为数据框中的新值。这行代码生成一个 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 & slopejoin$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 并检查条件中的那些但无济于事。感谢任何帮助!
【问题讨论】:
标签: r dataframe if-statement conditional-statements