r - 如何删除R中数据框列中的特定数字?
问题描述
我有两个数据框 d1 和 d2。我的数据框是 2010 年的人口普查数据。我想使用通用属性合并它们
merge (d1, d2, by.x="GEOID", by.y= "GISJOIN")
d1 具有与 GEOID 相同的 id(例如 310019654001),而 d2 具有与 GISJOIN 相同的 id 属性(例如 31000109654001)。我需要从 GISJOIN 属性中的第 3 和第 7 位置删除“0”。我怎么能在 R 中做到这一点?
我使用拆分值
splitted <- as.data.frame(t(sapply(d2$GISJOIN, function(x) substring(x, first=c(1,4,8), last=c(2,6,14)))))
splitted$v4 <- (paste(splitted$V1, splitted$V2, splitted$V3))
v4 是字符值,当我执行 as.numeric 时,它给了我错误:警告消息:强制引入的 NA
解决方案
太长,无法作为评论输入,使用您提供的唯一示例和另一个发明示例来表明您不需要 sapply() :
d2 = data.frame(GISJOIN=c("31000109654001","12345678910112"))
d2$GISJOIN = as.character(d2$GISJOIN)
你现在拥有的:
splitted <- as.data.frame(t(sapply(d2$GISJOIN, function(x) substring(x, first=c(1,4,8), last=c(2,6,14)))))
splitted$v4 <- (paste(splitted$V1, splitted$V2, splitted$V3))
V1 V2 V3 v4
31000109654001 31 001 9654001 31 001 9654001
12345678910112 12 456 8910112 12 456 8910112
新字符串之间仍然有空格,因此如果您转换 as.numeric() 它会给出 NA。下面我只是将其拆分为字符并排除位置 3 和 7:
d2$new = lapply(strsplit(d2$GISJOIN,""),function(i){
paste(i[-c(3,7)],collapse="")
})
as.numeric(d2$new)
[1] 310019654001 124568910112
推荐阅读
- swift - 如何在不破坏公证的情况下更新 macOS 捆绑包?
- python - 从父目录导入一个函数“ModuleNotFoundError: No module named 'functions'”
- sql - SQLite 中的 SQL IF / ELSE
- java - java.lang.AbstractMethodError: javax.ws.rs.core.Response$ResponseBuilder.status
- elasticsearch - ElasticSearch 启动错误 - 默认发现设置不适合生产使用;
- python - 使用自定义比例创建 Matplotlib 颜色条
- r - 将 for 循环结果放入数据帧
- mysql - Nodejs Docker容器在运行后立即停止快速模块未找到
- docker - 从 gitlab 获取凭据到 Spring Boot 应用程序的最佳实践
- expect - 遍历主机名列表以查看在它们上使用 ssh 是否成功