2017-04-25 4 views
-1

私は基本的にはちょうどR - 輸出NumsummaryはCSVする

write.csv(numsummary$table) 
ある提案 linked hereを使用してR. からnumsummaryが、私はCSVファイルへの要約のほとんどを得ることができますされている情報をいくつかの情報をエクスポートするいくつかの問題を抱えています

これを使用するたびに、最後の列はcsv出力から切り捨てられます。

私はcsv出力に最後の列を含める方法を見つけることができませんでした。誰かがこれを行う方法を知っているか、これを行う方法を見つけるために調べることができるリソースを指すことができるでしょうか。 ?

私が提供できる情報があれば教えてください。助けてもらえれば助けてくれてありがとう!

編集:最後の列(この場合は「n」の列)が切り捨てられている例の完全Rスクリプト。 csv.write(input $ table)を使用すると、数字の集計だけでなく、私が使用しているどのような出力にも最後の列が残っているようです。

#start toothGrowth csv generation 
#dataset available at https://vincentarelbundock.github.io/Rdatasets/csv/datasets/ToothGrowth.csv 

toothGrowth <- read.table("ToothGrowth.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) 
numSumTooth <- numSummary(toothGrowth[,c("dose", "len", "X")], statistics=c("mean", "sd", "IQR", "quantiles"), quantiles=c(0,.25,.5,.75,1)) 
str(toothGrowth) 
numSumTooth 
write.csv(numSumTooth$table, file="numSumTooth.csv") 

#end toothGrowth csv generation 

私は上記のスクリプトを使用して生成するペーストビンにここにリンクされている出力sumSumTooth

+0

あなたの問題に[再現性](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)の例を提供してください。私はテストで 'numSummary'をエクスポートすることに問題はありません。 –

+0

あなたの返信ありがとうございましたAdam、私は持っている問題を再現するスクリプトを追加しました。 – Scottmeup

答えて

0

理由は「n」は、他の探索的な値は以下のように保管されている間、その値は、numSummaryObj$nとして保持されているので、行方不明になりましたnumSummaryObj$table

file <- "https://vincentarelbundock.github.io/Rdatasets/csv/datasets/ToothGrowth.csv" 
toothGrowth <- read.table(file, header=T, sep=",", row.names=1, na.strings="NA", dec=".", strip.white=TRUE) 

numSumTooth <- RcmdrMisc::numSummary(toothGrowth[, c("len", "dose")]) 

nST <- data.frame(numSumTooth$table, numSumTooth$n) 
names(nST) <- c(colnames(numSumTooth$table), "n") 

write.csv(nST, "numSumTooth.csv") 

は==

EDIT:それをバック置く

は、単純なcbindまたはdata.frameコマンドが必要です

を私は個人的にdplyrtidyrのようなパッケージとデータハンドリングにいつか投資します、彼らは将来的に多くのマイレージと柔軟性を提供します。例えば、data.frameで同じnumSummaryを生成するために、あなたは次のことを実行できます。

toothGrowth %>% 
    select(-supp) %>% 
    gather(var, val) %>% #convert the wide data frame into the long-form, with var = dose and len 
    group_by(var) %>% 
    summarise(mean = mean(val), sd = sd(val), 
      IQR = IQR(val), 
      `0%`= min(val), 
      `25%` = quantile(val, 0.25), 
      `50%` = median(val), 
      `75%` = quantile(val, .75), 
      `100%` = max(val), 
      n = n()) 


# A tibble: 2 × 10 
    var  mean  sd IQR `0%` `25%` `50%` `75%` `100%`  n 
    <chr>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> 
1 dose 1.166667 0.6288722 1.5 0.5 0.500 1.00 2.000 2.0 60 
2 len 18.813333 7.6493152 12.2 4.2 13.075 19.25 25.275 33.9 60 

このアプローチで柔軟性があなたのような(各グループごとに意味を見つけるためにsupp内を選択することができるということですこの場合は):

toothGrowth %>% 
# select(-supp) %>% 
    gather(var, val, -supp) %>% 
    group_by(supp, var) %>% 
    summarise(mean = mean(val), sd = sd(val), 
      IQR = IQR(val), 
      `0%`= min(val), 
      `25%` = quantile(val, 0.25), 
      `50%` = median(val), 
      `75%` = quantile(val, .75), 
      `100%` = max(val), 
      n = n()) 


Source: local data frame [4 x 11] 
Groups: supp [?] 

    supp var  mean  sd IQR `0%` `25%` `50%` `75%` `100%`  n 
    <fctr> <chr>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> 
1  OJ dose 1.166667 0.6342703 1.5 0.5 0.500 1.0 2.000 2.0 30 
2  OJ len 20.663333 6.6055610 10.2 8.2 15.525 22.7 25.725 30.9 30 
3  VC dose 1.166667 0.6342703 1.5 0.5 0.500 1.0 2.000 2.0 30 
4  VC len 16.963333 8.2660287 11.9 4.2 11.200 16.5 23.100 33.9 30 

==

別の方法としては、(あなたが長い繰り返し構文を要約書くことは雑用であると感じた場合)例えば、関数を作成することです:

カスタム関数を実行すると
checkVar <- function(varname, data){ 
    val <- data[, varname] 
    tmp <- data.frame(mean = mean(val), 
        sd = sd(val), 
        IQR = IQR(val), 
        `0%`= min(val), 
        `25%` = quantile(val, 0.25), 
        `50%` = median(val), 
        `75%` = quantile(val, .75), 
        `100%` = max(val), 
        n = length(val)) 
    names(tmp) <- c("mean", "sd", "IQR", "`0%`", "`25%`", "`50%`", "`75%`", "`100%`", "n") 
    rownames(tmp) <- varname 
    return(tmp) 
} 

はあなたの要約統計量を与える:

checkVar("dose", ToothGrowth) 


     mean  sd IQR `0%` `25%` `50%` `75%` `100%` n 
dose 1.166667 0.6288722 1.5 0.5 0.5  1  2  2 60 

そして単一data.frameにそれらを置くことは、例えば、適用する機能を含み、 lapplyで:

do.call(rbind, lapply(c("dose", "len"), checkVar, data=ToothGrowth)) 


      mean  sd IQR `0%` `25%` `50%` `75%` `100%` n 
dose 1.166667 0.6288722 1.5 0.5 0.500 1.00 2.000 2.0 60 
len 18.813333 7.6493152 12.2 4.2 13.075 19.25 25.275 33.9 60