【发布时间】:2020-09-10 03:53:20
【问题描述】:
如果同一列中的模式与所需的模式不同,是否有一种直观的方法来替换数据框的两列中的值?具体来说,我的数据框如下所示:
Col1 Value1 Value2 my_HD_SAMPLE 34 0.34 my_HD_T_SAMPLE 6 0.6 my_BD_NAME 94 0.94 my_LE_NAME 1 0.1 my_TS_SAMPLE 74 0.74
如果 Col1 中的行与模式 BD|HD 不匹配,我想将第 2 列和第 3 列中的值替换为 0。期望的输出应该是:
Col1 Value1 Value2 my_HD_SAMPLE 34 0.34 my_HD_T_SAMPLE 6 0.6 my_BD_NAME 94 0.94 my_LE_NAME 0 0 my_TS_SAMPLE 0 0
我试过这个:
mydf = mydf$"Col1"[!grepl('BD|HD',mydf$"Col1")] <- 0
我收到了这条警告信息:
In [<-.factor`(`*tmp*`, !grepl("BD|HD", mydf$Col1), value = c(`NA` = NA, :
invalid factor level, NA generated
我该如何解决这个问题?
【问题讨论】:
-
表示
mydf$"Col1"是"factor"类的变量,而"0"不是该因素的级别。尝试levels(mydf$"Col1") <-c("0", levels(mydf$"Col1"))` 或将变量转换为as.character。 -
试试
mydf[!grepl('BD|HD',mydf$"Col1"),2:3] <- 0。确保 Value1 和 Value2 是数字。
标签: r