2016-06-13 4 views
1
имя файла

данных: игрушкикак создать новую переменную, основываясь на состоянии

Допустим, у меня есть следующий dataframe

ID Name 
1  Green Ball 
2  Red Ball 
3  Blue Bat 
4  Green Bat 
5  Blue Ball 
6  Ball 
7  Bat 

Я хотел бы добавить новую переменную «Color» с помощью функции поиска цвет в имени.

ID Name   Color 
1  Green Ball  Green 
2  Red Ball  Red 
3  Blue Bat  Blue 
4  Green Bat  Green 
5  Blue Ball  Blue 
6  Ball   Other 
7  Bat   Other 

Я никогда не использовал R и не знал, как это сделать. Я пробовал это, но не повезло.

toys$Color <- (
if toys$Name = "Green", Color "Green" 
else if toys$Name = "Red", Color "Red" 
else if toys$Name = "Blue, Color "Blue" 
else toys$Name = "Other" 
) 

Я бы очень признателен за помощь в этом.

Благодаря

+0

Это ваш фактический пример Цвета, или это просто гипотетический, и у вас есть главный список значений, которые вы хотите извлечь? – thelatemail

+0

Да, это Цвета. В основном столбец Name содержит фразу или описание. Я хочу, чтобы новый столбец Color просто просматривал список заданных цветов, если цвет соответствует где угодно в столбце Name, он должен поместить этот цвет в столбец Color. Если он обнаружит, что в столбце Имя нет соответствующих цветов, просто введите «Другое». Помогает ли это? – IronBat

+0

Вы проверили решение, которое я разместил ниже? – akrun

ответ

3

Мы можем использовать str_extract. Создайте vector всех цветов ('col1'), используйте str_extract, чтобы получить подстроки в 'Name', которые соответствуют элементам в 'col1' на paste ing the 'col1' as a single string separated by | . Replace the Элементы NA` на выходе в «Другое», чтобы создать новый столбец «Цвет».

library(stringr) 
col1 <- c("Green", "Red", "Blue") 
v1 <- str_extract(toys$Name, paste(col1, collapse="|")) 
v1[is.na(v1)] <- "Other" 
toys$Color <- v1 
toys 
# ID  Name Color 
#1 1 Green Ball Green 
#2 2 Red Ball Red 
#3 3 Blue Bat Blue 
#4 4 Green Bat Green 
#5 5 Blue Ball Blue 
#6 6  Ball Other 
#7 7  Bat Other 
1

Есть конечное количество цветов, поэтому вы можете создать список из них. Затем используйте str_detect из пакета stringr, который вам необходимо установить. Эта функция позволяет вам обнаружить наличие шаблона (цвета) в строке. Мы используем цикл для применения этой функции к каждому элементу в df.

df <- as.data.frame(c("Green Ball", "Ball", "Red Ball", "Blue Bat", "White cake", "Deep Purple")) 
colnames(df) <- "Items" 
colors <- c("Green", "Red", "Blue", "Purple", "Yellow", "White", "Black", "Pink") 

library(stringr) 
result <- NULL 
for (i in 1:NROW(df)){ 
    true.false <- str_detect(as.character(df[i,1]), colors) 
    col <- ifelse(any(true.false), colors[true.false], "No color") 
    result <- c(result, col) 
} 

df$Colors <- result 
df 
     Items Colors 
1 Green Ball Green 
2  Ball No color 
3 Red Ball  Red 
4 Blue Bat  Blue 
5 White cake White 
6 Deep Purple Purple 

Альтернатива: Вы также можете использовать это в течение цикла, описанного выше.

library('stringi') 
stri_detect_fixed("Deep Purple", c("Purple", "Blue")) 
#[1] TRUE FALSE 
Смежные вопросы