Как заполнить пустой фрейм данных столбцами из непустого фрейма данных? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть шаблон df только с именами столбцов df1 (0 наблюдений), и мне нужно взять значения (целые столбцы) от df2 для завершения df1.

df1 имеет имя столбца идентификатора, которое мне нужно дополнить столбцом SKU из df2.Но df1 также имеет столбцы, которые мне нужно сохранить с NA с, например: df1$ios_url.

Я пробовал:

df1$id <- df2$SKU

Но получил эту ошибку:

Ошибка в `$ <-. Data.frame` (` * tmp * `, id, value = c (" 0005CR "," 0020MG "," 0030HG ",: замена содержит 7041 ряд, данные имеют 0 </p>

df1 :

df1 <- structure(list(id = character(0), title = character(0), ios_url = character(0), 
    ios_app_store_id = character(0), ios_app_name = character(0), 
    android_url = character(0), android_package = character(0), 
    android_app_name = character(0), windows_phone_url = character(0), 
    windows_phone_app_id = character(0), windows_phone_app_name = character(0), 
    description = character(0), google_product_category = character(0), 
    product_type = character(0), link = character(0), image_link = character(0), 
    condition = character(0), availability = character(0), price = character(0), 
    sale_price = character(0), sale_price_effective_date = character(0), 
    gtin = character(0), brand = character(0), mpn = character(0), 
    item_group_id = character(0), gender = character(0), age_group = character(0), 
    color = character(0), size = character(0), shipping = character(0), 
    custom_label_0 = character(0)), .Names = c("id", "title", 
"ios_url", "ios_app_store_id", "ios_app_name", "android_url", 
"android_package", "android_app_name", "windows_phone_url", "windows_phone_app_id", 
"windows_phone_app_name", "description", "google_product_category", 
"product_type", "link", "image_link", "condition", "availability", 
"price", "sale_price", "sale_price_effective_date", "gtin", "brand", 
"mpn", "item_group_id", "gender", "age_group", "color", "size", 
"shipping", "custom_label_0"), row.names = integer(0), class = c("tbl_df", 
"tbl", "data.frame"), spec = structure(list(cols = structure(list(
    id = structure(list(), class = c("collector_character", "collector"
    )), title = structure(list(), class = c("collector_character", 
    "collector")), ios_url = structure(list(), class = c("collector_character", 
    "collector")), ios_app_store_id = structure(list(), class = c("collector_character", 
    "collector")), ios_app_name = structure(list(), class = c("collector_character", 
    "collector")), android_url = structure(list(), class = c("collector_character", 
    "collector")), android_package = structure(list(), class = c("collector_character", 
    "collector")), android_app_name = structure(list(), class = c("collector_character", 
    "collector")), windows_phone_url = structure(list(), class = c("collector_character", 
    "collector")), windows_phone_app_id = structure(list(), class = c("collector_character", 
    "collector")), windows_phone_app_name = structure(list(), class = c("collector_character", 
    "collector")), description = structure(list(), class = c("collector_character", 
    "collector")), google_product_category = structure(list(), class = c("collector_character", 
    "collector")), product_type = structure(list(), class = c("collector_character", 
    "collector")), link = structure(list(), class = c("collector_character", 
    "collector")), image_link = structure(list(), class = c("collector_character", 
    "collector")), condition = structure(list(), class = c("collector_character", 
    "collector")), availability = structure(list(), class = c("collector_character", 
    "collector")), price = structure(list(), class = c("collector_character", 
    "collector")), sale_price = structure(list(), class = c("collector_character", 
    "collector")), sale_price_effective_date = structure(list(), class = c("collector_character", 
    "collector")), gtin = structure(list(), class = c("collector_character", 
    "collector")), brand = structure(list(), class = c("collector_character", 
    "collector")), mpn = structure(list(), class = c("collector_character", 
    "collector")), item_group_id = structure(list(), class = c("collector_character", 
    "collector")), gender = structure(list(), class = c("collector_character", 
    "collector")), age_group = structure(list(), class = c("collector_character", 
    "collector")), color = structure(list(), class = c("collector_character", 
    "collector")), size = structure(list(), class = c("collector_character", 
    "collector")), shipping = structure(list(), class = c("collector_character", 
    "collector")), custom_label_0 = structure(list(), class = c("collector_character", 
    "collector"))), .Names = c("id", "title", "ios_url", "ios_app_store_id", 
"ios_app_name", "android_url", "android_package", "android_app_name", 
"windows_phone_url", "windows_phone_app_id", "windows_phone_app_name", 
"description", "google_product_category", "product_type", "link", 
"image_link", "condition", "availability", "price", "sale_price", 
"sale_price_effective_date", "gtin", "brand", "mpn", "item_group_id", 
"gender", "age_group", "color", "size", "shipping", "custom_label_0"
)), default = structure(list(), class = c("collector_guess", 
"collector"))), .Names = c("cols", "default"), class = "col_spec"))

DF2 :

df2 <- structure(list(TIENDA = c("CURACAO", "CURACAO", "CURACAO", "CURACAO", 
"CURACAO", "CURACAO"), SKU = c("0005CR", "0020MG", "0030HG", 
"0055CC", "006029T-053-000", "006544WM-053"), NOMBRE = c("Parrilla Mr Grill Camping Redonda 31cm", 
"Parrilla Mr Grill Mini Grill + Maletín 31cm", "Parrilla Mr Grill Handy Grill 36cm", 
"Parrilla Mr Grill Cilíndrica Con Tapa", "Olla Arrocera Oster 006029T-053-000 1.8L - Turquesa", 
"Tostadora Oster 006544WM - Rojo"), PRECIO_OFERTA = c(39, 89, 
69, 169, 178.99, 99), PRECIO_LISTA = c(49, 129, 89, 169, 179, 
99), PRECIO_INDEXADO = c(39, 89, 69, 169, 178.9, 99), URLSEO = c("https://www.lacuracao.pe/curacao/parrilla-mr-grill-camping-redonda-31cm-0005cr", 
"https://www.lacuracao.pe/curacao/parrilla-mr-grill-mini-grill--maletín-31cm-0020mg", 
"https://www.lacuracao.pe/curacao/parrilla-mr-grill-handy-grill-36cm-0030hg", 
"https://www.lacuracao.pe/curacao/parrilla-mr-grill-cilíndrica-con-tapa-0055cc", 
"https://www.lacuracao.pe/curacao/olla-arrocera-oster-006029t-053-000-18l---turquesa--006029t-053-000", 
"https://www.lacuracao.pe/curacao/tostadora-oster-006544wm---rojo--006544wm-053"
), CATEGORIA_VENTA = c("Aire Libre", "Aire Libre", "Aire Libre", 
"Escápate de la Rutina", "Ollas Arroceras", "Oster"), CATEGORIA_MAESTRA = c("HEC0101MR", 
"HEC0101MR", "HEC0101MR", "HED0101MR", "APA1301OS", "APA1701OS"
), PUBLICADO = c(1L, 1L, 1L, 1L, 0L, 0L), ADQUIRIBLE = c(1L, 
1L, 1L, 1L, 1L, 1L), FULLIMAGE = c("../efe_cat_as/646x1000/0005CR_1B.jpg", 
"../efe_cat_as/646x1000/0020MG_1.jpg", "../efe_cat_as/646x1000/0030HG_1B.jpg", 
"../efe_cat_as/646x1000/0055CC_1.jpg", "../efe_cat_as/646x1000/006029T-053-000_1.jpg", 
"../efe_cat_as/646x1000/006544WM-053_1.jpg"), THUMBNAIL = c("../efe_cat_as/200x310/0005CR_1B.jpg", 
"../efe_cat_as/200x310/0020MG_1.jpg", "../efe_cat_as/200x310/0030HG_1B.jpg", 
"../efe_cat_as/200x310/0055CC_1.jpg", "../efe_cat_as/200x310/006029T-053-000_1.jpg", 
"../efe_cat_as/200x310/006544WM-053_1.jpg"), MARCA = c("MR GRILL", 
"MR GRILL", "MR GRILL", "MR GRILL", "Oster", "Oster"), TAMAÑO = c("M", 
"M", "M", "M", "XS", "XS"), LASTUPDATE = structure(c(1525860198.288, 
1525860198.295, 1525860198.301, 1525860198.307, 1519742666.606, 
1519742666.61), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    MARCA_VERDE = c(1L, 1L, 1L, 1L, NA, NA), DIAS_VERDE = c(4L, 
    4L, 4L, 4L, NA, NA), FIELD3 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), TIPO_VERDE = c("Y3", "Y3", "Y3", "Y3", NA, NA)), .Names = c("TIENDA", 
"SKU", "NOMBRE", "PRECIO_OFERTA", "PRECIO_LISTA", "PRECIO_INDEXADO", 
"URLSEO", "CATEGORIA_VENTA", "CATEGORIA_MAESTRA", "PUBLICADO", 
"ADQUIRIBLE", "FULLIMAGE", "THUMBNAIL", "MARCA", "TAMAÑO", "LASTUPDATE", 
"MARCA_VERDE", "DIAS_VERDE", "FIELD3", "TIPO_VERDE"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

0 голосов
/ 05 октября 2018

Ошибка указывает, что df1 должно иметь столько строк, сколько df2.

Вот один из подходов, который извлекает имена столбцов df1 на первом этапе.Затем перезаписывает df1 так, что он содержит только один столбец id.Этот столбец будет иметь те же наблюдения, что и df2.Теперь мы можем создать все столбцы из начальных df1 и заполнить их NA с.

cols <- names(df1)
df1 <- data.frame(id = df2$SKU)
df1 <- `[<-`(df1, setdiff(cols, "id"), value = NA)
df1[, 1:4] # only printed the first four columns for illustration
#               id title ios_url ios_app_store_id
#1          0005CR    NA      NA               NA
#2          0020MG    NA      NA               NA
#3          0030HG    NA      NA               NA
#4          0055CC    NA      NA               NA
#5 006029T-053-000    NA      NA               NA
#6    006544WM-053    NA      NA               NA

Теперь мы можем заменить и другие столбцы

df1$title <- df2$NOMBRE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...