我对R编程有疑问。
如果我有如下数据集:
LA NY MA
1 2 3
4 5 6
3 5
4
(换句话说,并非所有行都相同。)
我正在尝试使用lm
来执行ANOVA测试(以确定每个状态中的平均数是否相同),并且它会一直显示“发生错误”,因为行不匹配。我该如何解决这个问题?
另外,当我lm
时,我通常会lm(y~x)
,所以如果我想lm(y~LA)
,那么就没有y变量可以输入。我应该创建一个新的列/行吗?这个?
答案 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