R编程:清理数据

时间:2014-11-02 01:04:23

标签: r

我对R编程有疑问。

如果我有如下数据集:

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

(换句话说,并非所有行都相同。) 我正在尝试使用lm来执行ANOVA测试(以确定每个状态中的平均数是否相同),并且它会一直显示“发生错误”,因为行不匹配。我该如何解决这个问题? 另外,当我lm时,我通常会lm(y~x),所以如果我想lm(y~LA),那么就没有y变量可以输入。我应该创建一个新的列/行吗?这个?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

您可以使用tidyr包中的gather()将数据整形为长格式以进行分析。它需要多个列,并将它们收集到键值对中:它使“宽”数据更长。

示例代码:

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