r - R根据单元格的部分内容对单元格进行条件编辑
问题描述
我正在使用一个数据集,其中包含许多列为“<.1”的值。我们通过输入一半的值来处理这些值:在这种情况下为 0.05。但是,并非数据集中的每个单元格都有这些 < 符号,因此我不能将数据集中的每个值都减半。如何有条件地编辑数据集以进行更改?似乎很容易解决,但我无法弄清楚。任何帮助深表感谢!!
df <- as.data.frame(matrix(c("0.09", "<.1", "40", "<.07", ".2", "376", "<0.075", "<0.01", "14"), ncol = 3, byrow = TRUE))
df
我希望我的数据看起来像这样:
df1 <- as.data.frame(matrix(c("0.09", "0.05", "40", "0.035", ".2", "376", "0.0375", "0.005", "14"), ncol = 3, byrow = TRUE))
df1
编辑:我已经这样做了:
x <- data[2]
data[2:23] <- lapply(data[2:23], function(x) {
dohalf <- grepl("^<", x)
vec2 <- as.numeric(gsub("^<", "", x))
vec2[dohalf] <- vec2[dohalf]/2
})
但我收到此错误:
Error: Assigned data `lapply(...)` must be compatible with existing data.
x Existing data has 241 rows.
x Element 1 of assigned data has 71 rows.
i Only vectors of size 1 are recycled.
是因为我有NA吗?在 241 个观测值的第一列中只有 71 个值具有此“<”。
解决方案
尝试这个:
vec <- c("<.1", ".1", ".5")
dohalf <- grepl("^<", vec)
dohalf
# [1] TRUE FALSE FALSE
vec2 <- as.numeric(gsub("^<", "", vec))
vec2[dohalf] <- vec2[dohalf]/2
vec2
# [1] 0.05 0.10 0.50
如果您想将它们保留为字符串,那么
as.character(vec2)
# [1] "0.05" "0.1" "0.5"
或者您只能根据需要进行数字化/减半/字符串化<*
。
vec
# [1] "<.1" ".1" ".5"
dohalf
# [1] TRUE FALSE FALSE
vec[dohalf] <- as.character(as.numeric(gsub("^<", "", vec[dohalf]))/2)
vec
# [1] "0.05" ".1" ".5"
推荐阅读
- python - 在 Python 中抓取多个页面
- swift - 为什么 xcode 不允许我使用 actionCodeSettings(直接从 firebase 文档复制并替换为我的信息)?
- css - webkit-text-fill-color 的 Safari 问题
- scala - 迭代 CompactBuffer——Spark 和 Scala
- php - 在 WooCommerce 中以编程方式添加多个产品
- vba - 在 ms-Access 中使用组合框创建搜索表单
- python - Matplotlib 颜色条在颜色中使用非均匀步骤
- javascript - 如何使用 React 路由器嵌套链接?
- nestjs - TypeORM 一对多 + 多对一访问问题
- java - 如果在应用程序启动后 5 分钟内没有用户登录,TimerTask 将退出应用程序