R 不允许使用NA
我是R和发帖新手,因此如果我错过了一些协议,请原谅,但我的问题是: 我正在创建临时向量,以便在需要时添加“0”。我最终想要一个由12位数字组成的值,如果不是这样,我将添加我需要的“0”的数量。但是,在尝试使用适当的零粘贴临时索引后,我收到以下消息:R 不允许使用NA,r,na,subscript,R,Na,Subscript,我是R和发帖新手,因此如果我错过了一些协议,请原谅,但我的问题是: 我正在创建临时向量,以便在需要时添加“0”。我最终想要一个由12位数字组成的值,如果不是这样,我将添加我需要的“0”的数量。但是,在尝试使用适当的零粘贴临时索引后,我收到以下消息: colnames(ALLMBRS) <- c("SSN","tracts","GeoBlock","GeoCodeBlck","GeoMatch") #TA Members Tracts #Remove special characters a
colnames(ALLMBRS) <- c("SSN","tracts","GeoBlock","GeoCodeBlck","GeoMatch") #TA Members Tracts
#Remove special characters and decimals
tmp1 <- str_replace_all(ALLMBRS$GeoCode,"[[:punct:]]","")
#Temporary Vector of ALLMBRS
tmp2 <- tmp1
#Vectors of Indices used to add 0's
add1 <- str_length(ALLMBRS$tracts) == 11
add2 <- str_length(ALLMBRS$tracts) == 10
add3 <- str_length(ALLMBRS$tracts) == 9
add4 <- str_length(ALLMBRS$tracts) == 8
add5 <- str_length(ALLMBRS$tracts) == 7
#Paste temporary vector indices into temporary vector
tmp2[add1] <- paste(tmp2[add1],"0",sep="")
tmp2[add2] <- paste(tmp2[add2],"00",sep="")
tmp2[add3] <- paste(tmp2[add3],"000",sep="")
tmp2[add4] <- paste(tmp2[add4],"0000",sep="")
tmp2[add5] <- paste(tmp2[add5],"00000",sep="")
我希望所有值都包含12位数字。所以我想看看
[1]000000000000
以及
[12]900348080020
Error Message: Error in tmp2[add1] <- paste(tmp2[add1],"0",sep = ""):
NAs are not allowed in subscripted assignments
[12]900348080020
错误消息:tmp2[add1]中出错您可以使用stru pad
fromstringr
填充字符串。将pad
参数设置为“0”
>x库(stringr)
>str_pad(x,12,pad=“0”)
# [1] "000000000000" "000000000000" "000000000000" "000000000000"
# [5] "000000000000" "000000000000" "000000000000" "360010146121"
# [9] "720210310133" "000000000000" "517100023001" "090034808002"
#[13] "250158202021" "250158211004" "250138125003" "290470203002"
#[17] "250138124031" "250158202033" "250138019012" "250138112002"
更新:对于包含任何NA值的向量,您可以执行以下操作
x[!is.na(x)] <- str_pad(x[!is.na(x)], 12, pad = "0")
x[!is.na(x)]y[!is.na(y)]y
#[1]“000000000000”NA“000000000123”“00000000068”
谢谢你,Richard。我收到一条错误消息:“无效的时间值”。这是因为我有NAs作为一些值吗?@user3067851我刚刚试过,是的,似乎是这样。尝试x[!is.na(x)]
> x <- c("0", "0", "0", "0", "0", "0", "0", "360010146121",
"720210310133", "0", "517100023001", "90034808002",
"250158202021", "250158211004", "250138125003",
"290470203002", "250138124031", "250158202033",
"250138019012", "250138112002")
> library(stringr)
> str_pad(x, 12, pad = "0")
# [1] "000000000000" "000000000000" "000000000000" "000000000000"
# [5] "000000000000" "000000000000" "000000000000" "360010146121"
# [9] "720210310133" "000000000000" "517100023001" "090034808002"
#[13] "250158202021" "250158211004" "250138125003" "290470203002"
#[17] "250138124031" "250158202033" "250138019012" "250138112002"
x[!is.na(x)] <- str_pad(x[!is.na(x)], 12, pad = "0")
> y <- c("0", NA, "123", "68")
> y[!is.na(y)] <- str_pad(y[!is.na(y)], 12, pad = "0")
> y
# [1] "000000000000" NA "000000000123" "000000000068"