我正在尝试分析从实验测试中获取的一些数据,并记录几个变量。我已经将数据框导入R,并且希望通过处理这些数据来获取一些统计信息。 特别是,我想用一个与导入数据框相同的变量名填充一个空数据框,但具有统计功能,例如均值,中位数,众数,最大值,最小值和分位数作为每个变量的行。 输入数据帧大约是60列x 25万行。
我已经设法使用apply
来做到这一点,如以下针对单个输入文件的代码行所述。
df[1,] <- apply(mydata,2,mean,na.rm=T)
df[2,] <- apply(mydata,2,sd,na.rm=T)
...
现在,我需要在for循环中为多个输入文件mydata_1, mydata_2, mydata_3, ...
进行此操作,以便构建几个摘要统计数据帧,每个输入文件一个。
我以几种不同的方式尝试过,尝试使用apply
和assign
,但是我无法真正设法访问循环在多个输入文件上的输出数据帧中感兴趣的每一行。
我喜欢做类似下面的代码的事情(我知道这段代码行不通,只是想让我知道要做什么)。
输出的df数据帧已经定义并且为空。
for (xx in 1:number_of_mydata_files) {
df_xx[1,]<-apply(mydata_xx,2,mean,na.rm=T)
df_xx[2,]<-apply(mydata_xx,2,sd,na.rm=T)
...
}
实际上我不记得这段代码给出的错误消息,但是问题是我什至无法运行它,因为它不起作用。
我是R的初学者,所以我在使用这种语言方面没有太多经验。有没有办法做到这一点?还有其他功能可以代替应用和分配吗?
编辑:
我在此处添加一个简单的表描述,该表描述表示我正在使用的输入数据框。很抱歉,此处的数据显示效果不佳。基本上,我正在使用的输入数据帧是.csv导入文件,看起来像表,第一行是列说明,又称测量变量的名称,而后一行是获取的数据。每个文件中的每个变量都有25万次采集,而我有5-8个这样的文件作为输入。
Current [A] | Force [N] | Elongation [%] | ...
—————————————————————————————————————
Value_a_1 | Value_b_1 | Value_c_1 | ...
我只想获得像这样的数据帧作为输出,并使用相同的变量名,但将统计值作为行。例如,第一行不是每个变量获取的第一个值,而是每个变量250k采集的平均值。第二行是标准偏差,第三行是方差,依此类推。 我设法为输出摘要统计信息建立了空的数据框,其中只有列,还没有行。我只想填充它们,然后在for循环中重复进行此操作。
答案 0 :(得分:1)
不确定数据的外观,但是您可以执行以下操作,其中lst
代表数据帧列表。
lst <- list(iris[,-5],mtcars,airquality)
lapply(seq_along(lst),
function(x) sapply(lst[[x]],function(x)
data.frame(Mean=mean(x,na.rm=TRUE),
sd=sd(x,na.rm=TRUE))))
或由@G建议。格洛腾迪克很简单:
lapply(lst, sapply, function(x)
data.frame(Mean = mean(x, na.rm = TRUE), sd = sd(x, na.rm = TRUE)))
如果所有文件都在同一目录中,请设置工作目录,并在输入文件中使用list.files()
或ls()
到walk
。
如果它们共享相同的列名,则可以将结果rbind
放入单个数据集中。