目录:
- 添加行和列总计
- <! --3 - >
- 进行选择电子表格让您能够执行各种“如果? “分析。这样做的一种方法是在电子表格中使用if()函数。 R还具有if()函数,但它主要用于脚本中的流量控制。因为您通常要对R中的整个向量执行计算,所以使用ifelse()函数通常更合适。
- 你可以在在R中有两种方法:
- 移位列或行
- 虹膜[!使用查找表
- 对于稍微复杂的表格 - 也就是说,具有两个以上交叉分类因子的表格 - 使用聚合()函数: >>集合(hp〜cyl + gear + am,mtcars,mean)柱面齿轮hp 1 4 3 0 97. 00000 2 6 3 0 107. 50000 3 8 3 0 194. 16667 4 4 4 0 78. 50000 5 6 4 0 123. 00000 6 4 4 1 75. 16667 7 6 4 1 110. 00000 8 4 5 1 102. 00000 9 6 5 1 175. 00000 10 8 5 1 299. 50000
视频: KMS破解器(破解Office、Windows) 2024
电子表格可能是使用最广泛的PC应用程序之一 - 出于很好的理由:电子表格使得在表格上执行计算和其他操作变得非常容易数据。但是电子表格也会带来一些风险:它们很容易腐败,很难调试。好消息是,您可以使用R来完成许多与电子表格相同的操作。
添加行和列总计
<! --1 - >您可能经常在电子表格中执行的一项任务是计算行或列总计。最简单的方法是使用函数rowSums()和colSums()。同样,使用rowMeans()和colMeans()来计算均值。
在内置的数据集虹膜上试试。首先,删除第五列,因为它包含描述虹膜种类的文本:
虹膜。 num < - iris [,-5]
然后计算每列的总和和平均值:
colSums(iris。num)> colMeans(iris。num)
这两个函数非常方便,但是可能需要为每一列或每行计算一些其他的统计量。遍历数组或数据框的行或列是一种简单的方法:apply()函数。例如,获取列的最小值与对数据的第二维应用min()函数相同: >> apply(iris。num,2,min)> apply(iris。num,2,最大)
格式化数字
trim
-
: 一个逻辑值。如果为FALSE,则会添加空格,以便将结果右对齐。如果为TRUE,则取消前导空格。 数字
-
: 要显示的数字值的有效位数。 nsmall
-
: 小数点后的最小位数。 另外,可以用小数点控制小数点的格式。标记,间隔
之前的标记与 小数点之间的标记。标记, 之后的间隔 之间的标记小数点。标记。 例如,您可以用逗号作为小数点,空格作为大标记,点作为小标记打印数字12345. 6789:
格式(12345。6789,digits = 9,decimal。标记=“,”,+大。标记=“”,小。标记=“。”,小。区间= 3)[1]“12 345,678. 9”
作为一个更实际的例子,使用mtcars中某些列的方法,然后用小数点后两位数字打印结果,使用以下命令: >> x format(x,digits = 2,nsmall = 2)mpg cyl disp hp“20。09“”6. 19“”230。 72“”146。 69“
请注意,结果不再是一个数字,而是一个文本字符串。所以,当你使用数字格式时要小心 - 这应该是你的报告工作流程的最后一步。
如果您熟悉使用类似于C或C ++的语言进行编程,那么您也可能会发现sprintf()函数有用。这个包装允许你把你的格式化的数字直接粘贴到一个字符串中。
以下是将数字转换为百分比的示例: >> x sprintf(“%。1f %%”,100 * x)[1]“50。 0%“”51。 0%“”52。 0%“”53。 0%“”54。 0%“”55。 0%“
这就是它的作用:sprintf()的第一个参数表示格式 - 在本例中为”%“。 1f %%“。格式参数使用特殊的文字,表示函数应该用一个变量替换这个文字,并应用一些格式。文字始终以%符号开始。所以,在这种情况下,%。 1f表示将第一个提供的值格式化为小数点后一位的固定点值,%%是一个文本,表示打印%。
将某些数字格式化为货币 - 在这种情况下,美元 - 使用:
设置。种子(1)> x sprintf(“$%3。2f”,x)[1]“$ 265. 51”“$ 372. 12”“$ 572. 85”“$ 908. 21”“$ 201 68 “
sprintf()函数为您提供了一种将任何变量的值粘贴到字符串中的替代方法: >> stuff price sprintf(”%s cost $%3。2f“,stuff,price)[1]“面包花费$ 2.10”“cookies花费$ 4.00”
这里发生的是,因为你向sprintf()提供了两个向量(每个都有两个元素),所以你的结果是一个有两个元素的向量。 R遍历元素并将它们放入sprintf()文字中。
你可以使用paste()和format()来做所有事情,你可以用sprintf()来完成,所以你不需要使用它。但是,当你这样做,它可以简化你的代码。
排序数据
要对R中的数据进行排序,请使用sort()或order()函数。
要按列hp的递增或递减顺序对数据帧mtcars进行排序,请使用以下命令:
使用if
进行选择电子表格让您能够执行各种“如果? “分析。这样做的一种方法是在电子表格中使用if()函数。 R还具有if()函数,但它主要用于脚本中的流量控制。因为您通常要对R中的整个向量执行计算,所以使用ifelse()函数通常更合适。
下面是使用ifelse()在数据集mtcars中标识具有高燃料效率的汽车的示例: >> mtcars < - transform(mtcars,+ mpgClass = ifelse(mpg mtcars [mtcars $ mpgClass ==“High” ,]
计算条件合计
你可能在Excel中做了很多其他的事情,是用函数sumif()和countif()计算条件和和计数。
你可以在在R中有两种方法:
使用ifelse。
简单地计算一部分数据的兴趣度量。假设您想计算mtcars中的燃油效率条件平均值。你用mean()函数做这个。现在,为了获得150马力门槛两侧的燃油效率,请尝试以下方法:
(mtcars,mean(mpg))[1] 20. 09062> with(mtcars,mean(mpg [hp with(mtcars,mean(mpg [hp> = 150]))[1] 15. 40667
计算向量中的元素个数与询问其长度是一样的,这意味着Excel函数countif )具有长度为R的等效长度(): >>(mtcars,长度(mpg [hp> 150]))[1] 13
移位列或行
有时需要将数据在R中,转置矩阵的函数为t(): >> xx [,1] [,2] [,3] [1,] 1 5 9 [2,] 2为了得到矩阵的转置,使用t(): >> t(x)[,1] [,2] [, 3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12
你也可以用t()来转置数据帧,但是当你做这个转换的结果总是一个矩阵(或数组),因为数组总是只有一个类型的变量,如数字或字符,结果的变量类型可能不是你所期望的。
-
查找唯一或重复的值
-
要识别数据中的所有唯一值,请使用unique()函数。尝试在mtcars中找到唯一的气缸数值: >> unique(mtcars $ cyl)[1] 6 4 8
有时您想知道数据的哪些值是重复的。根据您的情况,这些重复项将是有效的,但有时重复项可能表示数据输入问题。
识别重复条目的功能是重复的()。在内置的数据集虹膜中,第143行有一个重复的行。试一试:
dupes head(dupes)[1] FALSE FALSE FALSE FALSE FALSE FALSE> which(dupes)[1] 143> iris [笨蛋,]脓疱。长度Sepal。宽花瓣。长的花瓣。 Width Species 143 5. 8 2. 7 5. 1 1. 9 virginica
因为duplicate()的结果是一个逻辑向量,所以可以用它作为索引从数据中删除行。要做到这一点,使用否定运算符 - 感叹号(如!dupes):
虹膜[!使用查找表
在电子表格应用程序(如Excel)中,可以使用函数vlookup或索引和匹配的组合创建查找表。在R中,使用merge()或match()可能会很方便。 match()函数返回一个与查找值匹配的元素位置的向量。
例如,要在mtcars的行名称中找到元素“Toyota Corolla”的位置,请尝试以下操作: >> index index [1] 20> mtcars [index,1:4] mpg cyl disp hp Toyota Corolla 33. 9 4 71. 1 65
使用数据透视表
对于R中的简单表,可以使用tapply()函数实现类似的结果,以便在Excel中透视表。下面是使用tapply()计算具有不同数量的汽缸和齿轮的汽车的平均hp的示例:
(mtcars,tapply(hp,list(cyl,gear),mean))3 4 5 4 97。 0000 76. 0 102. 0 6 107. 5000 116. 5 175. 0 8 194. 1667 NA 299. 5
对于稍微复杂的表格 - 也就是说,具有两个以上交叉分类因子的表格 - 使用聚合()函数: >>集合(hp〜cyl + gear + am,mtcars,mean)柱面齿轮hp 1 4 3 0 97. 00000 2 6 3 0 107. 50000 3 8 3 0 194. 16667 4 4 4 0 78. 50000 5 6 4 0 123. 00000 6 4 4 1 75. 16667 7 6 4 1 110. 00000 8 4 5 1 102. 00000 9 6 5 1 175. 00000 10 8 5 1 299. 50000
使用目标寻找和求解器在R中,optimize()函数为优化函数提供了一个相当简单的机制。假设你是公司的销售总监,你需要为你的产品设定最好的价格。换句话说,找到最大化收入的产品的价格。在经济学中,一个简单的定价模型指出,当价格上涨时,人们购买给定产品的数量会减少。这是一个非常简单的函数,具有以下行为: >> sales < - function(price){100 - 0.5 * price}
预期收入仅为价格和预期销售额的乘积: >>收入< - 函数(价格){价格*销售(价格)}
您可以使用curve()函数绘制连续函数。这需要一个函数作为输入并产生一个图。尝试使用curve()函数绘制销售和收入的行为,从$ 50到$ 150变动价格:
oldpar曲线(销售,从= 50到= 150,xname =“price”,main =“Sales “)>曲线(收入,从= 50,到= 150,xname =”价格“,main =”收入“)> par(oldpar)
您的结果应该看起来类似于此。预期销售和收入的模型。你有一个销售和收入的工作模式。你可以立即看到有一个最大的收入点。接下来,使用R函数optimize()来查找该最大值。要使用optimize(),你需要告诉它使用哪个函数(在这种情况下,是收益()),以及间隔(在这种情况下,价格在50和150之间)。默认情况下,optimize()搜索最小值,所以在这种情况下,你必须告诉它搜索最大值: >> optimize(revenue,interval = c(50,150),maximum = TRUE)$ maximum [1] 100 $ objective [1] 5000
你去了。收取$ 100的价格,并期望获得$ 5,000美元的收入。