繁体   English   中英

计算并写入R中列的均值和SD

[英]Calculate and write Mean and SD for columns in R

我目前正在使用* csv中的数据。 我已经有一个有效的脚本来绘制我的数据了,但是似乎似乎最简单的任务使我感到困惑。 我正在尝试编写一个脚本,该脚本接收我的数据(按列排列),并使其按列计算均值并将其写入新文档(./testAVG)。

另外,我正在尝试获取相同的数据,计算SD(按列),然后将该数据附加到原始文档的末尾(最好是重复一次以获取我拥有的数据的总数)。

这是我到目前为止的脚本:

#Number of lines with data 
Nlines = 5
#Number of lines to skip
Nskip = 0

chem <- read.table("./test.csv", skip=Nskip, sep=",", col.names = c("Sample", "SiO2", "Al2O3", "FeO", "MgO", "CaO", "Na2O", "K2O", "Total", "eSiO2", "eAl2O3", "eFeO", "eMgO", "eCaO", "eNa2O", "eK2O"), fill=TRUE, header = TRUE, nrow=Nlines)

sd1 <- sd(chem$SiO2)
sd2 <- sd(chem$Al2O3)
sd3 <- sd(chem$FeO)
sd4 <- sd(chem$MgO)
sd5 <- sd(chem$CaO)
sd6 <- sd(chem$Na2O)
sd7 <- sd(chem$K2O)

avg1 <- colMeans(chem$SiO2, na.rm = FALSE, dims=1)
avg2 <- colMeans(chem$Al2O3, na.rm = FALSE, dims=1)
avg3 <- colMeans(chem$FeO, na.rm = FALSE, dims=1)
avg4 <- colMeans(chem$MgO, na.rm = FALSE, dims=1)
avg5 <- colMeans(chem$CaO, na.rm = FALSE, dims=1)
avg6 <- colMeans(chem$Na2O, na.rm = FALSE, dims=1)
avg7 <- colMeans(chem$K2O, na.rm = FALSE, dims=1)

write <- write.table(sd1,sd2,sd3,sd4,sd5,sd6,sd7, file="./test.csv", append=TRUE, sep=",", dec=".", col.names = c("eSiO2", "eAl2O3", "eFeO", "eMgO", "eCaO", "eNa2O", "eK2O"))

write <- write.table(avg1, avg2, avg3, avg4, avg5, avg6, avg7, file="./testAVG.csv", append=FALSE, sep=",", dec=".", col.names = c("Sample", "SiO2", "Al2O3", "FeO", "MgO", "CaO", "Na2O", "K2O", "Total"))

我正在使用的数据是这样的

Sample, SiO2, Al2O3, FeO, MgO, CaO, Na2O, K2O, Total,eSiO2,eAl2O3,eFeO,eMgO,eCaO,eNa2O,eK2O
01,65.01,14.77,0.34,1.31,17.27,1.14,0.2,100,,,,,,,
02,72.6,16.27,0.53,0.06,1.27,5.55,3.71,100,,,,,,,
03,64.95,14.65,0.18,1.29,17.48,1.21,0.23,100,,,,,,,
04,64.95,14.65,0.18,1.29,17.48,1.21,0.23,100,,,,,,,

我收到此错误:

Error in colMeans(chem$SiO2, na.rm = FALSE, dims = 1) : 
  'x' must be an array of at least two dimensions

有什么建议吗? 谢谢

注释已经暗示了如何执行此操作,但是您似乎对R mtcars ,所以让我使用mtcars数据集向您明确显示如何做得更好:

df <- mtcars

df_sd <- apply(df, 2, sd) # this is how to use apply. See ?apply
df_avg <- colMeans(df)    # this is how to use colMeans. See ?colMeans

write.table(df_sd, file="test.csv")     # no assignment necessary.
write.table(df_avg, file="testAVG.csv") # writing the file is a desired side effect...

此外,请考虑以下行:

avg1 <- colMeans(chem$SiO2, na.rm = FALSE, dims=1)

colMeans是它可以一次计算许多列的列均值。 在这里,您仅提供一个向量,即chem$SiO2 如果这确实是您想要做的,则只需编写

avg1 <- mean(chem$SiO2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM