У меня есть кадр данных с несколькими символьными переменными разной длины, и я хотел бы преобразовать каждую переменную в список, где каждый элемент содержит каждое слово, разделенное пробелами.
Скажем, мои данные выглядят так:
char <- c("This is a string of text", "So is this")
char2 <- c("Text is pretty sweet", "Bet you wish you had text like this")
df <- data.frame(char, char2)
# Convert factors to character
df <- lapply(df, as.character)
> df
$char
[1] "This is a string of text" "So is this"
$char2
[1] "Text is pretty sweet" "Bet you wish you had text like this"
Теперь я могу использовать strsplit() для разделения каждого столбца по словам:
df <- transform(df, "char" = strsplit(df[, "char"], " "))
> df$char
[[1]]
[1] "This" "is" "a" "string" "of" "text"
[[2]]
[1] "So" "is" "this"
Я хотел бы создать цикл или функцию, которая позволила бы мне сделать это для обоих столбцов одновременно, например:
for (i in colnames(df) {
df <- transform(df, i = strsplit(df[, i], " "))
}
Однако это приводит к ошибке:
Error in data.frame(list(char = c("This is a string of text", "So is this", :
arguments imply differing number of rows: 6, 8
Я также пробовал:
splitter <- function(colname) {
df <- transform(df, colname = strsplit(df[, colname], " "))
}
сплиттер (имена столбцов (df))
Что говорит мне:
Error in strsplit(df[, colname], " ") : non-character argument
Я не понимаю, почему вызов преобразования работает для отдельного столбца, но не при применении в цикле или функции. Любая помощь приветствуется!
df <- data.frame(char, char2, stringsAsFactors = FALSE)
. Более того, понимаете ли вы, чтоlapply(df, as.character)
возвращает список, а не фрейм данных?transform
работает с фреймами данных, а не со списками. Наконец, каков желаемый результат? Вы хотитеdata.frame
list
? Этот вопрос очень сбивает с толку. - person David Arenburg   schedule 23.04.2015