Как добавить фиктивную переменную в качестве нового столбца в уже существующий набор данных в R - PullRequest
0 голосов
/ 22 марта 2020

Я использую R, и я не уверен, как создать фиктивную переменную для существующих данных.

Данные имеют названия нескольких стран, и я хочу добавить фиктивную переменную, которая равный 1 для определенных стран и равный 0 в зависимости от определенных критериев; то есть dummy == 1 если страна типа A, dummy == 0 если страна типа B. Как мне это настроить, а затем как добавить эту фиктивную переменную в качестве нового столбца в наборе данных?

Спасибо .

Ответы [ 3 ]

0 голосов
/ 22 марта 2020

Используйте data.table, чтобы связать его, сначала присвоив всем строкам 0, а затем 1 в выбранных вами строках

library(data.table)
DT1 <- data.table(
  "V1" = c("a", "a", "b"),
  "V2" = c("b", "c", "c"),
  "V3" = c(2,6,9)) 

DT1[, dummy := 0][V1 == "a", dummy := 1]

При просмотре комментария к другому ответу у вас нет столбца типа, который здесь V1. Если у вас есть вектор стран каждого типа («typeVector»), используйте %in%

# if you need to manually make the vector first...
typeVector <- c("US", "Finland", "Germany")
# assign a 1 to those selected countries...
DT1[, dummy := 0][country %in% typeVector, dummy := 1]
0 голосов
/ 22 марта 2020

Используйте предложение ifelse.

ДАННЫЕ :

df <- data.frame(
  Country = c("Liberia","Sudan", "Reunion", "Ghana", 
              "Bangladesh", "San Marino", "Serbia", "Syria", "Latvia"))

РЕШЕНИЕ :

Допустим, один условием для получения страной значения 1 является то, что ее имя начинается с заглавной буквы S. Вы можете определить это как шаблон для сопоставления с grepl, а когда ifelse оценивается как ИСТИНА, присвойте значение 1; иначе вы присваиваете значение 0:

df$dummy <- ifelse(grepl("^S", df$Country), 1, 0)

РЕЗУЛЬТАТ :

df
     Country dummy
1    Liberia     0
2      Sudan     1
3    Reunion     0
4      Ghana     0
5 Bangladesh     0
6 San Marino     1
7     Serbia     1
8      Syria     1
9     Latvia     0
0 голосов
/ 22 марта 2020

Если есть только два типа, например, тип A и B, ответ, указанный в комментариях с ifelse(), является работоспособным.

Однако, если существует более двух типов, для одного потребуется более одного столбца для хранения переменных уровней type в качестве фиктивных переменных. Для этой цели можно использовать пакет dummies. Если type является столбцом во фрейме данных, мы можем использовать функцию dummies::dummy() для создания одной фиктивной переменной для каждого типа. Мы проиллюстрируем некоторые примеры данных.

 textFile <- "name,country,type
Joe,England,A
Herve,France,A
Pat,US,B
Jane,US,B
Frank,Canada,B,
Julio,Mexico,C
Juan,Cuba,C"

data <- read.csv(text=textFile)
dummyData <- dummy(data$type)
dummyData

... и вывод:

> dummyData
     typeA typeB typeC
[1,]     1     0     0
[2,]     1     0     0
[3,]     0     1     0
[4,]     0     1     0
[5,]     0     1     0
[6,]     0     0     1
[7,]     0     0     1
> 

Чтобы добавить фиктивные данные во фрейм входных данных, мы используем функцию dummy.data.frame().

dummyData <- dummy.data.frame(names = c("type"),data = data)
dummyData 

... и вывод:

> dummyData
   name country typeA typeB typeC
1   Joe England     1     0     0
2 Herve  France     1     0     0
3   Pat      US     0     1     0
4  Jane      US     0     1     0
5 Frank  Canada     0     1     0
6 Julio  Mexico     0     0     1
7  Juan    Cuba     0     0     1
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...