2016-06-30 3 views
0

個々の観測ごとに数値ID変数を含むデータフレームがあります。ただし、すべての数字が同じ長さではありません。私は元の値を分割し、数字がないところに欠損値を入れたいと思っています。異なる長さの数字を数字に分割する方法

例:私は

cbind(read.fwf(file = textConnection(as.character(df[,1])), widths = c(1, 1, 1, 1, 1, 1, 2), 
       colClasses = "character", col.names = c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7"))) 

を使用して試してみましたが、それは唯一のフルレングスの数字が含まれている変数を考慮

ID1 ID2  ID3  ID4  ID5  ID6  
       1  9  0  1    
5  0  1  9  0  1  

:私はそれがこの方法を検討する必要があり

ID Var    
    1901     
501901 

。ここ

+0

問題を再現できません。 – Psidom

答えて

0
library(stringr) 
a <- c(1901, 501901) 
b <- as.character(a) 
d <- str_pad(b, 6, pad = " ") 
out <- as.data.frame(do.call(rbind, strsplit(d, ""))) 
out[out == " "] <- NA 
2

は、基地R関数を使用する方法である:

# example data 
id <- c(14, 1901, 1237, 990, 501901) 

charList <- strsplit(sprintf(paste0("%", max(nchar(id)), ".0f"), id), split="") 

# put into data.frame 
myData <- data.frame(do.call(rbind, charList)) 
myData 
    X1 X2 X3 X4 X5 X6 
1    1 4 
2  1 9 0 1 
3  1 2 3 7 
4   9 9 0 
5 5 0 1 9 0 1 

リチャード-スクリヴンが言及@ように、これは典型的には、特定の状況でのみ有用である因子変数を生成します。整数に変換するには、次のようにします。

myData[] <- lapply(myData, function(i) as.integer(as.character(i))) 
+0

これがfactor列になることに注意してください –

関連する問題