在R中的数据框中的两个字符之间添加空格

时间:2012-10-17 05:33:00

标签: string r character dataframe

我有一个数据框,其中每个单元格是2个字符串(即:“AA”,“BC”,“CD”),其中我试图在两个字符中的每一个之间放置空格,并且其中NA值保持为是。我似乎无法弄清楚这一点。任何帮助????

以下是一个示例数据框:

 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>

提前致谢!

4 个答案:

答案 0 :(得分:5)

如果它只是表明这是一种方法:

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

答案 1 :(得分: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
  }))

答案 2 :(得分:3)

这是一种方式

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

答案 3 :(得分:-2)

你试过这个吗?

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