2015-11-30 3 views
0

У меня проблема при извлечении и создании нового data.frame на основе предыдущего.Извлечение частей data.frame

Итак, мы имеем:

> head(data.raw) 
     date id  contacted contacted_again region 
1 2015-11-29 234   CHAT   EMAIL APAC 
2 2015-11-29 234   EMAIL   EMAIL APAC 
3 2015-11-27 257   PHONE   PHONE EMEA 
4 2015-11-27 278   PHONE   EMAIL APAC 
5 2015-11-27 293   CHAT   EMAIL EMEA 
6 2015-11-27 243   EMAIL   EMAIL EMEA 
      market           
1    AU/NZ 
2 SE Asia (English) 
3    Spain 
4 China Mainland 
5    DACH 
6    DACH 

Однако один я пишу

data.ru <- data.raw[data.raw$market=="Russia",] 

я получаю следующий беспорядок:

  date    id  contacted contacted_again region market 
67 2015-11-25   334    CHAT   EMAIL EMEA Russia 
NA   <NA>   <NA>   <NA>   <NA> <NA> <NA> 
NA.1  <NA>   <NA>   <NA>   <NA> <NA> <NA> 
NA.2  <NA>   <NA>   <NA>   <NA> <NA> <NA> 
NA.3  <NA>   <NA>   <NA>   <NA> <NA> <NA> 
NA.4  <NA>   <NA>   <NA>   <NA> <NA> <NA> 

Как я должен написать команду, чтобы получить только нормальный data.frame со всеми строками, которые $ market == «Россия» без каких-либо НС?

+0

Вы, вероятно, 'NA's в ваших данных и R не знает, как обращаться с ними так, он просто оставляет их там. вы можете легко воссоздать это с помощью 'x <- c (1, 2, 1, 1, NA, NA); x [x == 1] 'например. В этом случае это можно было бы решить, используя 'x [x == 1 &! Is.na (x)]'. Кроме того, не забудьте также добавить тег языка в следующий раз. –

+0

Номера наблюдений не имеют NA (т.е. 1,2,3 и т. Д.), Но в этом случае даже они получают НС. Кроме того, ни одно наблюдение с заявлениями [== «Россия»] не имеет в себе всех НС. –

+0

Что делает 'sum (is.na (data.raw $ market))' дает вам? –

ответ

0

Я бы просто использовал функцию подмножества.

test <- data.frame(x = c("USA", "USA", "USA", "Russia", "Russia", NA), y = c("Orlando", "Boston", "Memphis", NA, "St. Petersburg", "Mexico City")) 
print(test) 
     x    y 
1 USA  Orlando 
2 USA   Boston 
3 USA  Memphis 
4 Russia   <NA> 
5 Russia St. Petersburg 
6 <NA> Mexico City 

subset(test, x == "Russia") 
     x    y 
4 Russia   <NA> 
5 Russia St. Petersburg 
0

Вы можете попробовать: data.ru < - data.raw [data.raw $% рынка в% "Россия",]

Объяснение: Я предполагаю, что у вас есть пустые строки в набор данных, который считывается как NA (отсутствующее значение). Так как R не может знать, соответствует ли данный NA «Russia» или нет, в него формируется сформированный кадр данных.

Иллюстрация в коде:

# create sample dataset 
example.df <- data.frame(market=c(NA, "Russia", NA), outcome = c(1,2,3)) 

# match market using == 
example.df$market == "Russia" 
example.df[example.df$market == "Russia",] 

# match market using %in% 
example.df$market %in% "Russia" 
example.df[example.df$market %in% "Russia",] 
Смежные вопросы