【发布时间】:2011-03-24 20:53:21
【问题描述】:
我是 R 新手,我正在尝试创建一个 .R 脚本,该脚本将打开我的 .csv 文件并计算一些频率。此文件中有标头,与它们关联的值是 1,0,NA 或 -4。我想要做的是遍历每个垂直行,然后计算它们的频率。我确信这是一个简单的脚本,但我不确定 R 的语法是如何工作的。谁能帮我开始?
【问题讨论】:
标签: r csv statistics
我是 R 新手,我正在尝试创建一个 .R 脚本,该脚本将打开我的 .csv 文件并计算一些频率。此文件中有标头,与它们关联的值是 1,0,NA 或 -4。我想要做的是遍历每个垂直行,然后计算它们的频率。我确信这是一个简单的脚本,但我不确定 R 的语法是如何工作的。谁能帮我开始?
【问题讨论】:
标签: r csv statistics
具体的脚本会根据您的输入和您想要的输出类型(只是打印到交互式控制台?写入 .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")