导入数据帧与在R中创建数据帧
我正试图为我的主管创建一个专门的摘要“矩阵”,并希望以一种干净、可读的形式导出它。因此,我从零开始创建它,基本上是为了适应我们的项目。我的问题是,我不知道如何让创建的数据帧表现得像导入的数据帧,特别是标题 我最喜欢使用标题处理导入的数据帧,并按名称而不是按列号调用特定行:导入数据帧与在R中创建数据帧,r,R,我正试图为我的主管创建一个专门的摘要“矩阵”,并希望以一种干净、可读的形式导出它。因此,我从零开始创建它,基本上是为了适应我们的项目。我的问题是,我不知道如何让创建的数据帧表现得像导入的数据帧,特别是标题 我最喜欢使用标题处理导入的数据帧,并按名称而不是按列号调用特定行: iris$Sepal.Length with(iris,Sepal.Length) iris['Sepal.Length'] 现在,如果我想创建一个数据帧或矩阵,我不完全确定区别是什么,我尝试了以下方法: groups<
iris$Sepal.Length
with(iris,Sepal.Length)
iris['Sepal.Length']
现在,如果我想创建一个数据帧或矩阵,我不完全确定区别是什么,我尝试了以下方法:
groups<-c("Group 1", "Group 2")
factors<-c("Fac 1", "Fac 2", "Fac 3","Fac 4", "Fac 5")
x<-1:10
y<-11:20
z<-21-30
data<-cbind(groups, factors, x, y, z)
names(data) #returns NULL
data$x #clearly doesn't return the column 'x' since the matrix 'data' has no names
data<-data.frame(cbind(groups, factors, x, y, z))
names(data) #confirms that there are header names
等,适用于所有组和因素的组合 您可以使用plyr软件包中的ddply:假设您的原始数据帧是mydata,而存储结果的新数据帧是newdata:
library(plyr)
newdata<-ddply(mydata,.(Groups,Factors),summarize,mean.x=mean(x),mean.y=mean(y),mean.z=mean(z))
示例:mydata您可以使用plyr软件包中的ddply:假设您的原始数据帧是mydata,而存储结果的新数据帧是newdata:
library(plyr)
newdata<-ddply(mydata,.(Groups,Factors),summarize,mean.x=mean(x),mean.y=mean(y),mean.z=mean(z))
示例:mydata我想这就是你要找的,但我对你的问题总的来说有点困惑。这基本上会为您提供一个数据透视表,其中包含按“组”和“因子”列分组的x、y和z列的平均值
aggregate(.~groups+factors, data=data, FUN="mean")
groups factors x y z
1 Group 1 Fac 1 1 1 1
2 Group 2 Fac 1 7 6 1
3 Group 1 Fac 2 8 7 1
4 Group 2 Fac 2 3 2 1
5 Group 1 Fac 3 4 3 1
6 Group 2 Fac 3 9 8 1
7 Group 1 Fac 4 10 9 1
8 Group 2 Fac 4 5 4 1
9 Group 1 Fac 5 6 5 1
10 Group 2 Fac 5 2 10 1
或使用按物种分组的iris数据:
aggregate(.~Species, data=iris, FUN="mean")
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
更新:要仅计算某些列的平均值,您可以仅将数据集中适当的列传递给聚合函数(可能是调用子集),也可以修改如下公式:
aggregate(cbind(Sepal.Length,Sepal.Width)~Species, data=iris, FUN="mean")
我想这就是你想要的,但是我对你的问题有点困惑。这基本上会为您提供一个数据透视表,其中包含按“组”和“因子”列分组的x、y和z列的平均值
aggregate(.~groups+factors, data=data, FUN="mean")
groups factors x y z
1 Group 1 Fac 1 1 1 1
2 Group 2 Fac 1 7 6 1
3 Group 1 Fac 2 8 7 1
4 Group 2 Fac 2 3 2 1
5 Group 1 Fac 3 4 3 1
6 Group 2 Fac 3 9 8 1
7 Group 1 Fac 4 10 9 1
8 Group 2 Fac 4 5 4 1
9 Group 1 Fac 5 6 5 1
10 Group 2 Fac 5 2 10 1
或使用按物种分组的iris数据:
aggregate(.~Species, data=iris, FUN="mean")
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
更新:要仅计算某些列的平均值,您可以仅将数据集中适当的列传递给聚合函数(可能是调用子集),也可以修改如下公式:
aggregate(cbind(Sepal.Length,Sepal.Width)~Species, data=iris, FUN="mean")
我不完全确定这是否是您想要的,但有几个选项可以向数据帧添加“内容”:
要添加变量,只需键入data$newname我不完全确定这是否是您要查找的变量,但有几个选项可以向数据帧添加“内容”:
要添加变量,只需键入data$newname您的代码对我不起作用。您有两个组、三个因子和10个x/y/z记录。这会导致cbind抛出错误。请提供一个可复制的示例。更新为5个因素。很抱歉你的平均数例子也不适用于你的缺失。请仅发布已测试的工作代码,而不要在问题中键入未测试的代码。代码末尾缺少括号。再说一次,我的错。我没有复制/粘贴足够远。你的代码对我不起作用。您有两个组、三个因子和10个x/y/z记录。这会导致cbind抛出错误。请提供一个可复制的示例。更新为5个因素。很抱歉你的平均数例子也不适用于你的缺失。请仅发布已测试的工作代码,而不要在问题中键入未测试的代码。代码末尾缺少括号。再说一次,我的错。我复制/粘贴的距离不够远。当你用z而不是s编写摘要时,你的代码能工作吗?是的,你可以测试它!我确实试过了。由于某些原因,只有s在我的R.R中工作。可能你也加载了Hmisc?是的,我使用Rstudio,所以正如你在stackoverflow上解释的那样,从另一个包调用Summary。当你用z而不是s编写Summary时,你的代码工作吗?是的,你可以测试它!我确实试过了。出于某种原因,只有s在我的R.R中工作。也许你也加载了Hmisc?是的,我使用Rstudio,所以正如你在stackoverflow上解释的那样,从另一个包调用Summary。这似乎就是我想要的。我查看了帮助文件以获取聚合,但是您能澄清一些问题吗?我通过键入来假设。~在物种之前,这相当于聚合函数的by部分。如果我只想要sepl.Length和sepl.Width,而不是数据集中所有列的平均值,我将如何指定?更新了我的答案,向您展示了如何修改聚合公式。这似乎是我想要的。我查看了帮助文件以获取聚合,但是您能澄清一些问题吗?我通过键入来假设。~在物种之前,这相当于聚合函数的by部分。如果我只想说sepl.Length和sepl.Width,而不是数据集中所有列的平均值,我将如何指定?更新我的答案以向您展示如何修改聚合公式这正是我在创建空数据框开始时想要的!这正是我在创建一个空的数据框开始寻找的!
aggregate(.~Species, data=iris, FUN="mean")
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
aggregate(cbind(Sepal.Length,Sepal.Width)~Species, data=iris, FUN="mean")
data <- data.frame(x=numeric())
data <- rbind(data, data.frame(x))
data <- data.frame(x=numeric(),
y=numeric(),
a=character(),
b=factor(levels=c("Factor 1", "Factor 2")))
data1 <- data.frame(x=1:10, y=1)
data2 <- data.frame(y=2, z=100:110)
rbind(data1, data2) # Error
data1$z <- NA
data2$x <- NA
rbind(data1, data2) # Now it works