我编写了几个函数,并希望只将它们应用于输入CSV文件的最后两列。问题是如何将最后两列转换为向量并将我的函数应用于它们?
myAvg <- function(anyVector){
average <- sum(anyVector) / length(anyVector)
return(average)
}
mySD <- function(anyVector){
std_Dev <- sqrt(sum((anyVector - mean(anyVector)) ^ 2 / (length(anyVector) - 1)))
return(std_Dev)
}
myRange <- function(anyVector){
myRange <- max(anyVector) - min(anyVector)
return(myRange)
}
data <- read.csv("CardioGoodnessFit.csv")
print(data)
答案 0 :(得分:3)
正如@ Mako212建议的那样,使用R中的apply
函数可以很容易地实现这一点:
avg = apply(data[,c('Income','Miles')],MARGIN=2,FUN=myAvg)
sdev = apply(data[,c('Income','Miles')],MARGIN=2,FUN=mySD)
函数myAvg
将apply
添加到数据子集的每一列。可以通过在向量中提供列名或列号来指定感兴趣的列。 Apply
通常用于矩阵或data.frame类型对象。虽然MARGIN
提供了将FUN
列方式(MARGIN = 2
),行方式(MARGIN=1
)或两者应用于数据{{1}的每个元素的选项})
答案 1 :(得分:2)
如果你使用例如 dplyr
,则无需转换为向量(或者在这种情况下,甚至可以转换为函数):
library(dplyr)
# means
data %>% summarise(avg = mean(Income))
data %>% summarise(avg = mean(Miles))
# standard deviations
data %>% summarise(sdev = sd(Income))
data %>% summarise(sdev = sd(Miles))
# range
data %>% summarise(range = max(Income) - min(Income))
data %>% summarise(range = max(Miles) - min(Miles))