我有一个数据框,其中每个单元格是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>
提前致谢!
答案 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
时,参数stringsAsFactors
为TRUE
。
答案 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