0
我是R的这个世界的新手。从我读过的任何东西,我知道apply()
用于遍历矩阵/矢量/数据框中的每一行/列。在R中的数据框的子集中使用apply()
我必须声明,我的代码:
a$count <- apply(a[1:9,],1,countRows,species="setosa")
的coutRows
功能如下:
countRows <- function(x,species){
count <- sum(iris$sl == x['sl'] & iris$sw == x['sw'] & iris$Species == species)
}
我的本意是仅在第9行中a
工作在有的值添加到count
列使用任何在countRows()
中完成的计算。这就是为什么我使用a[1:9,]
作为apply()
的第一个参数。
出于某种原因,apply()
在完整的数据帧上运行。的a
在上面的语句的执行结束时的内容如下所示:
sl sw count species
1 low low 1 setosa
2 mid low 0 setosa
3 high low 0 setosa
4 low mid 32 setosa
5 mid mid 1 setosa
6 high mid 0 setosa
7 low high 12 setosa
8 mid high 4 setosa
9 high high 0 setosa
10 low low 1 versicolor
11 mid low 0 versicolor
12 high low 0 versicolor
13 low mid 32 versicolor
14 mid mid 1 versicolor
15 high mid 0 versicolor
16 low high 12 versicolor
17 mid high 4 versicolor
18 high high 0 versicolor
19 low low 1 virginica
20 mid low 0 virginica
21 high low 0 virginica
22 low mid 32 virginica
23 mid mid 1 virginica
24 high mid 0 virginica
25 low high 12 virginica
26 mid high 4 virginica
27 high high 0 virginica
我期望剩余18行到含有0下count
列,因为我已经一切设置为0最初。
我在apply()
声明中做了什么错误?
有两个问题,1)您将输出分配给整个“a”,即“$ count”2)您可能需要转置 – akrun
问题1是主要问题。我以这种方式解决了'a [1:9,'count'] < - apply(a [1:9,],1,countRows,species =“setosa”)''。有没有更好的方法来做到这一点? –
'countRows'函数在做什么? – akrun