Создание нового вектора из 2-х размеров данных разных размеров - PullRequest
1 голос
/ 22 апреля 2020

У меня есть 2 кадра данных. Df A имеет 40 строк, Df B имеет 50.

Каждая строка соответствует штату США. Каждый из них имеет 2 столбца: имя штата и цвет.

Я хочу создать новый вектор (colorvector) из всех цветов всех 50 состояний. Цвет по умолчанию должен быть dfB, однако, если состояние присутствует в dfA, я бы хотел, чтобы вместо этого был взят цвет.

Я пытался: colorvector <- as.vector(ifelse(dfA$state == dfB$st, dfA$color, dfB$color))

Я получаю сообщение об ошибке:

уровни наборов факторов различны

Я пытался сделать dfA длиной 50 строк и просто заполнить его NA, но это тоже не сработало.

Извините, если мое форматирование выключено!

1 Ответ

0 голосов
/ 22 апреля 2020

Я думаю, что вы можете выполнить sh по-другому, используя dplyr:

library(dplyr)

# Make sure none of your variables are factors
dfA <- dfA %>%
mutate_if(is.factor,as.character)

dfB <- dfB %>%
mutate_if(is.factor,as.character)

# Join data and change any of the NA color values from dfB to corresponding values from dfA

    dfC <- left_join(dfA,dfB,by="State")

    dfC$color.y <- ifelse(is.na(dfC$color.y),dfC$color.x, dfC$color.y)

# Create colorvector
    colorvector <- as.vector(dfC$color.y)

dput для dfA:

dfA <- structure(list(State = c("Alabama", "Alaska", "Arizona", "Arkansas", 
"California", "Colorado", "Connecticut", "Delaware", "Florida", 
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", 
"Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", 
"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", 
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", 
"New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", 
"Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", 
"Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", 
"West Virginia", "Wisconsin", "Wyoming"), color = c("color_Alabama", 
"color_Alaska", "color_Arizona", "color_Arkansas", "color_California", 
"color_Colorado", "color_Connecticut", "color_Delaware", "color_Florida", 
"color_Georgia", "color_Hawaii", "color_Idaho", "color_Illinois", 
"color_Indiana", "color_Iowa", "color_Kansas", "color_Kentucky", 
"color_Louisiana", "color_Maine", "color_Maryland", "color_Massachusetts", 
"color_Michigan", "color_Minnesota", "color_Mississippi", "color_Missouri", 
"color_Montana", "color_Nebraska", "color_Nevada", "color_New Hampshire", 
"color_New Jersey", "color_New Mexico", "color_New York", "color_North Carolina", 
"color_North Dakota", "color_Ohio", "color_Oklahoma", "color_Oregon", 
"color_Pennsylvania", "color_Rhode Island", "color_South Carolina", 
"color_South Dakota", "color_Tennessee", "color_Texas", "color_Utah", 
"color_Vermont", "color_Virginia", "color_Washington", "color_West Virginia", 
"color_Wisconsin", "color_Wyoming")), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -50L))

dput для dfB:

dfB <- structure(list(State = c("Alabama", "Alaska", "Arizona", "Arkansas", 
"California", "Colorado", "Connecticut", "Delaware", "Florida", 
"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", 
"Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", 
"Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", 
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", 
"New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", 
"Oregon", "Pennsylvania", "Rhode Island", "South Carolina", NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA), color = c("color_Alabama", 
"color_Alaska", "color_Arizona", "color_Arkansas", "color_California", 
"color_Colorado", "color_Connecticut", "color_Delaware", "color_Florida", 
"color_Georgia", "color_Hawaii", "color_Idaho", "color_Illinois", 
"color_Indiana", "color_Iowa", "color_Kansas", "color_Kentucky", 
"color_Louisiana", "color_Maine", "color_Maryland", "color_Massachusetts", 
"color_Michigan", "color_Minnesota", "color_Mississippi", "color_Missouri", 
"color_Montana", "color_Nebraska", "color_Nevada", "color_New Hampshire", 
"color_New Jersey", "color_New Mexico", "color_New York", "color_North Carolina", 
"color_North Dakota", "color_Ohio", "color_Oklahoma", "color_Oregon", 
"color_Pennsylvania", "color_Rhode Island", "color_South Carolina", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -50L
), class = c("tbl_df", "tbl", "data.frame"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...