1

我有一个数据框,其中每个单元格都是 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

4 回答 4

5

如果它像您展示的那样简单,这是一种方法:

data.frame(lapply(df, function(x){
    ifelse(is.na(x), NA, 
    paste(substring(x, 1, 1), substring(x, 2)))
}))
于 2012-10-17T05:48:20.960 回答
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
  }))
于 2012-10-17T05:43:14.823 回答
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.

于 2012-10-17T05:40:49.523 回答
-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适当地使用

于 2012-10-17T05:57:56.900 回答