我找不到一个令人满意的教程来解释如何使用所有apply函数的可能性。虽然我还是个新手,但这常常很方便,并且可以显著简化我的代码。下面是我的例子……
我有一个看起来像这样的数据框:
> head(p01)
time key dwell
1 8.13 z 0.00
3 8.13 x 1.25
5 9.38 l 0.87
7 10.25 x 0.15
9 10.40 l 1.13
11 11.53 x 0.45
将其导入R:
p01 <- structure(list(time = c(8.13, 8.13, 9.38, 10.25, 10.4, 11.53),
key = c("z", "x", "l", "x", "l", "x"), dwell = c(0, 1.25,
0.869, 0.15, 1.13, 0.45)), .Names = c("time", "key", "dwell"), row.names = c(1L, 3L, 5L, 7L, 9L, 11L), class = "data.frame")
现在我想要统计中每个字母的出现次数,并将它们打印到中,结果应该像这样:
time key dwell occurences
1 8.13 z 0.00 1
3 8.13 x 1.25 3
5 9.38 l 0.87 2
7 10.25 x 0.15 3
9 10.40 l 1.13 2
11 11.53 x 0.45 3
我现在的做法是:
p01[p01$key == "l", "occurences"] <- table(p01$key)["l"]
p01[p01$key == "x", "occurences"] <- table(p01$key)["x"]
p01[p01$key == "z", "occurences"] <- table(p01$key)["z"]
...这当然不是最好的解决方案。特别是因为真实数据在p01$key
中包含更多可能性(16个不同字母之一)。
除此之外,我想要计算每个字母的总dwell
,所以现在我正在做的是:
p01[p01$key == "l", "total_dwell"] <- tapply(p01$dwell, p01$key, sum)["l"]
p01[p01$key == "x", "total_dwell"] <- tapply(p01$dwell, p01$key, sum)["x"]
p01[p01$key == "z", "total_dwell"] <- tapply(p01$dwell, p01$key, sum)["z"]
为了获得以下内容:
time key dwell total_dwell
1 8.13 z 0.00 0.00
3 8.13 x 1.25 1.85
5 9.38 l 0.87 2.00
7 10.25 x 0.15 1.85
9 10.40 l 1.13 2.00
11 11.53 x 0.45 1.85
我已经通过谷歌以及查阅了几本书籍6个小时了,非常希望能够得到一个优雅的解决方案和/或一个综合教程的链接。 我的解决方案显然是有效的,但这不是我第一次像这样绕过问题,而且我的脚本文件开始看起来很荒谬!