如何将输入数据框列转换为向量

时间:2017-09-07 05:25:48

标签: r

我编写了几个函数,并希望只将它们应用于输入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)

Here is the first couple lines of the file

2 个答案:

答案 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)

函数myAvgapply添加到数据子集的每一列。可以通过在向量中提供列名或列号来指定感兴趣的列。 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))