【问题标题】:Loop through a .csv file in R, computing relative frequencies?循环遍历 R 中的 .csv 文件,计算相对频率?
【发布时间】:2011-03-24 20:53:21
【问题描述】:

我是 R 新手,我正在尝试创建一个 .R 脚本,该脚本将打开我的 .csv 文件并计算一些频率。此文件中有标头,与它们关联的值是 1,0,NA 或 -4。我想要做的是遍历每个垂直行,然后计算它们的频率。我确信这是一个简单的脚本,但我不确定 R 的语法是如何工作的。谁能帮我开始?

【问题讨论】:

    标签: r csv statistics


    【解决方案1】:

    具体的脚本会根据您的输入和您想要的输出类型(只是打印到交互式控制台?写入 .csv?)而有所不同,但这是我的尝试:

    #Read the data into .csv - it assumes headers
    dat <- read.csv(file = "yourfile.csv")
    
    #For right now, use this fake data
    dat <- data.frame(x = c(-4, 0, 1, 1, -4, NA, NA, 0), y = c(1, 1, 1, 0, -4, NA, 0, NA))
    
    #Get the frequency of values for each column, assuming every column consists of data
    apply(X = dat, MARGIN = 2, FUN = function(x) {summary(factor(x))})
    

    apply 函数将您给它的函数 (FUN) 应用到您给它的数据的边距(1 = 行,2 = 列)上。你可以给它任何你喜欢的功能。传递FUN = summary 将为您提供每列的平均值、最小值、最大值等(因为它们是数字)。但是对于因子,summary() 的默认方法是频率,这正是您所需要的。因此,不要传递摘要,而是欺骗 R 将您的数字视为一个因素:定义一个匿名函数 function(x)(应用程序会知道 x 您指的是一次取一个的列)。将此函数设置为首先将 x 转换为因子 (factor(x)),然后汇总该因子。这将返回一个矩阵,其中包含每列的频率。

    不是有史以来最优雅的代码,但我认为它可以满足您的需求。

    【讨论】:

    • 为了更漂亮的代码,你可以做apply(dat, 2, table, useNA = "always")
    • 非常好 - 我知道必须有更好的方法,而不是把它变成一个因素。
    猜你喜欢
    • 2021-02-07
    • 2014-04-10
    • 2013-09-10
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-07-21
    • 2019-04-11
    • 2020-01-28
    相关资源
    最近更新 更多