首页 > 解决方案 > 如何删除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

标签: rdataframe

解决方案


太长,无法作为评论输入,使用您提供的唯一示例和另一个发明示例来表明您不需要 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

推荐阅读