2012-10-17 44 views
0

數據幀我有一個數據幀,其中每個小區是2個字符串(即:「AA」,「BC」,「CD」),其中我試圖把之間的空間兩個字符中的每一個,以及NA值保持原樣。我似乎無法弄清楚這一點。任何幫助?添加兩個字符之間的空間作爲R

下面是一個例子的數據幀:

df <- data.frame(col1=c("AB", "CD", "EF"), col2=c("AA", "BB", "CC"), col3=c("XX", "YY", NA)) 

這是示例數據幀的樣子:

col1 col2 col3 
1 AB AA XX 
2 CD BB YY 
3 EF CC <NA> 

這就是我希望我的數據幀的樣子:

col1 col2 col3 
1 A B A A X X 
2 C D B B Y Y 
3 E F C C <NA> 

提前感謝!

回答

2

這裏有一種方法

df2 <- data.frame(lapply(df, function(x) { 
    levels(x) <- gsub("(.)(.)", "\\1 \\2", levels(x)) 
    return(x) 
})) 

df2 

# col1 col2 col3 
# 1 A B A A X X 
# 2 C D B B Y Y 
# 3 E F C C <NA> 

當然,這依賴於假設,創造了data.frame df參數時stringsAsFactorsTRUE

4

如果您data.frame列所有因素,那麼你就可以在水平工作

as.data.frame(lapply(df, function(x){ 
.l <- unlist(lapply(strsplit(levels(x),''), paste, collapse = ' ')) 
    levels(x) <- .l 
x})) 

如果您data.frame列字符(stringsAsFactors = FALSE)

as.data.frame(lapply(df, function(x){ 
    .l <- unlist(lapply(strsplit(x,''), paste, collapse = ' ')) 
    .l 
    })) 
5

如果是那樣簡單如你所示這是一種方法:

data.frame(lapply(df, function(x){ 
    ifelse(is.na(x), NA, 
    paste(substring(x, 1, 1), substring(x, 2))) 
})) 
-1

你試過這個嗎?

df <- data.frame(col1=c("A B", "C D", "E F"), col2=c("A A", "B B", "C C"), col3=c("X X", "Y Y", NA)) 

我試過了,我得到你需要的東西,似乎太傻了!

如果你是動態獲取的列值,想你可以使用一個paste適當連同strsplit

x <- "AB" 
strsplit(x, '') 
[[1]] 
[1] "A" "B" 

然後你可以用這一點,並使用paste適當

+0

你可以放心地假設stackoverfow上的每個答案都應該是動態的。 –

相關問題