2014-11-02 2 views
0

У меня вопрос о программировании R.R программирование: данные очистки

Если у меня есть набор данных, как следующее:

LA NY MA 
1 2 3 
4 5 6 
3 5 
4 

(. Другими словами, не все строки одинаковы) Я пытаюсь использовать lm выполнить тест ANOVA (чтобы решить, будет ли среднее число одинаково в каждом состоянии), и он продолжает показывать «произошла ошибка», потому что строки не совпадают. Как я могу исправить эту проблему? Кроме того, когда я делаю lm, я обычно делаю lm(y~x), поэтому, если я хочу сделать lm(y~LA), тогда нет переменной y для ввода. Должен ли я создать для этого новый столбец/строку?

+0

Ваши данные не ясно. Это поможет, если вы разместите первые несколько строк данных. Если это как кадр данных, разместите вывод head (yourdataframe) здесь. – rnso

+0

Отредактировано данные! извините за путаницу! – Betty

+0

Вы можете преобразовать данные в формат 2 столбца: состояние и среднее значение. Тогда будет легче проанализировать. – rnso

ответ

1

Возможно, вы могли бы сделать что-то подобное. Чтобы прочитать данные, используйте аргумент fill в read.table. Где text = txt, вы бы поставили там свое имя файла.

(dat <- read.table(text = txt, header = TRUE, fill = TRUE)) 
# LA NY MA 
# 1 1 2 3 
# 2 4 5 6 
# 3 3 5 NA 
# 4 4 NA NA 

Затем мы можем взять средства столбца и создать новый кадр данных из двух столбцов.

cm <- colMeans(dat, na.rm = TRUE) 
data.frame(state = names(cm), mean = unname(cm)) 
# state mean 
# 1 LA 3.0 
# 2 NY 4.0 
# 3 MA 4.5 

где txt является

txt <- "LA NY MA 
1 2 3 
4 5 6 
3 5 
4" 
0

Вы можете использовать собрать() из tidyr пакета для формирования данных в длинном формате с целью анализа. Он принимает несколько столбцов и собирает их в пары «ключ-значение»: он расширяет «широкие» данные.

Пример кода:

LA <- c(1,4,3,4) 
NY <- c(4,5,6, NA) 
MA <- c(3,6, NA, NA) 
df <- data.frame(LA, NY, MA) # data in wide format 

library(tidyr) 
df <- df %>% gather(attribute, value) # data in long format 
Смежные вопросы