【问题标题】:How to remove specific digits in dataframe columns in R?如何删除R中数据框列中的特定数字?
【发布时间】:2025-12-16 01:00:01
【问题描述】:

我有两个数据框 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 时,它会给我错误:警告消息: 强制引入的 NAs

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    使用您提供的唯一示例和另一个发明示例来显示您不需要 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
    

    【讨论】: