Добавление пробела между двумя символами в кадре данных в R
У меня есть фрейм данных, где в каждой ячейке находятся 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 ответа
Вот один из способов
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
,
Если это так просто, как вы показываете, это подход:
data.frame(lapply(df, function(x){
ifelse(is.na(x), NA,
paste(substring(x, 1, 1), substring(x, 2)))
}))
Если ваши столбцы 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
}))
Ты пробовал это?
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
надлежащим образом