我有一个庞大的数据库,正试图有效地添加一个新的计算列,这取决于另一个列的状态。例如,假设我的df中有3列。
如果col1不为空,那么我想应用公式(df$col3*df$col1^df$col2(。如果col1为空,那么我希望新列的值为df$col3。我试过
df$col4<-ifelse(df$col1 == "", (df$col3 * df$col1 ^ df$col2), df$col3)
但我遇到的问题是,它无法识别df$col1中的空单元格。我还尝试过制作df$col1==NA,但没有成功。如何使我的条件语句识别R中的空单元格,并做出相应的响应?
可能有空格而不是空白。一个选项是用trimws
包装以删除"col1"上的空格,然后应用ifelse
ifelse(trimws(df$col1) != "", (df$col3 * as.numeric(df$col1) ^ df$col2), df$col3)
如果列"col1"是numeric
并且具有NA
元素,则使用标准is.na
检查NA
元素
ifelse(!is.na(df$col1), (df$col3 * df$col1 ^ df$col2), df$col3)
如果你有一个大型数据库,你可以考虑使用data.table来提高分配效率。在这里,我将col3分配给col4,然后通过"链接"两个表达式,将派生值再分配给col1中不是NA的值
library(data.table)
setDT(df)
df[, col4 := col3][!is.na(col1), col4 := col3 * col1 ^ col2]