объединить данные, содержащие разные случаи в R

113
13

У меня возникла проблема, когда мне нужно объединить два фрейма данных, но в общем столбце есть разные случаи (некоторые из них имеют верхний регистр, а некоторые - в нижнем регистре)

Пример данных:

authors <- data.frame(
surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
nationality = c("US", "Australia", "US", "UK", "Australia"),
deceased = c("yes", rep("no", 4)))

books <- data.frame(
name = I(c("tukey", "venables", "tierney",
"tipley", "ripley", "McNeil", "R Core")),
title = c("Exploratory Data Analysis",
"Modern Applied Statistics ...",
"LISP-STAT",
"Spatial Statistics", "Stochastic Simulation",
"Interactive Data Analysis",
"An Introduction to R"),
other.author = c(NA, "Ripley", NA, NA, NA, NA,
"Venables & Smith"))
m1 <- merge(authors, books, by.x = "surname", by.y = "name")

Данные взяты из этого вопроса

Мне нужно произвести результат без изменения данных, т.е.

1) У меня нет доступа для создания нового столбца в фрейме данных или

2) изменить регистр в кадре данных или

3) создать новый фрейм данных.

Я понимаю, что R зависит от случая, но какая-то помощь будет действительно оценена. Благодарю.

спросил(а) 2018-04-23T11:19:00+03:00 2 года, 5 месяцев назад
1
Решение
80

Предполагая, что вы можете создавать временные фреймы данных, я бы сделал следующее.

Храните данные в временных фреймах данных. Создайте временные столбцы с преобразованиями, указанными в вашем примере. Объедините временные фреймы данных на основе преобразований. Удалите ненужные переменные.

Переведено в R, что дает.

library(stringr)
books_temp <- books # store in temporary df
authors_temp <- authors
authors_temp$surname_temp <- str_to_title(authors_temp$surname) # transform columns
books_temp$name_temp <- str_to_title(books_temp$name)
m1 <- merge(authors_temp, books_temp, by.x = "surname_temp", by.y = "name_temp") # merge
m1$surname_temp <- NULL # discard unnecessary information
rm(authors_temp)
rm(books_temp)

Обратите внимание, что было бы очень сложно объединить два фрейма данных, содержащие информацию, требующую обработки без каких-либо промежуточных преобразований.

ответил(а) 2018-04-23T11:56:00+03:00 2 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема