我正在尝试编写一个需要:
- 将列名视为变量
- 获取列的长度(或访问最后一行)
- 对列中的行子集求和
我可以用 做第 1 步sapply
,但我被困在第 2 步。如何获得向量的长度?下面是一个示例数据集。
my.data <- read.table(text = '
y1970 y1980 y1990
5 7 9
50 70 90
500 700 900
5000 7000 9000
', header = TRUE, na.string='NA', stringsAsFactors=FALSE)
步骤 2 的预期结果是:
5000 7000 9000
步骤 3 的期望结果是:
4445 6223 8001
这是第 2 步的函数:
my.function <- function(x) {
names.x <- as.character(colnames(my.data)[x])
x2 <- my.data[[x]][length(x)] # returns first row of my.data
return(x2=x2)
}
sapply(1:ncol(my.data), function(x) {my.function(x)})
# possible code for Step 3 if I get Step 2 to work:
(x2 - sum(my.data[[x]][1:(length(my.data[[x]])-1)], na.rm=TRUE)
也许x
has length == 1
,这可以解释为什么上面的代码只返回x2
我想要返回的行的第一行,而不是最后一行。
我可以在函数外部轻松地执行这些操作,但是如何在允许将列名用作变量的函数内部执行它们呢?谢谢你的任何建议。