2015-02-13 2 views
0

У меня есть проблема вычисления среднего значения столбцов для набора данных, импортируемых из this CSV fileCSV преобразование в R для стандартных расчетов

импортировать файл с помощью следующей команды:

dataGSR = read.csv("ShimmerData.csv", header = TRUE, sep = ",",stringsAsFactors=T) 
dataGSR$X=NULL #don't need this column 

Тогда я беру подмножество этого

dati=dataGSR[4:1000,] 

я проверить их правильность

head(dati) 
    Shimmer Shimmer.1 Shimmer.2  Shimmer.3 Shimmer.4  Shimmer.5 Shimmer.6  Shimmer.7 
4 31329   0  713 623.674691281028  2545 3706.5641025641  2409 3529.67032967033 
5 31649 9.765625  713 623.674691281028  2526 3678.89230769231  2501 3664.46886446886 
6 31969 19.53125  712 638.528829576655  2528 3681.80512820513  2501 3664.46886446886 
7 32289 29.296875  713 623.674691281028  2516 3664.3282051282  2498 3660.07326007326 
8 32609 39.0625  711 654.10779696494  2503 3645.39487179487  2496 3657.14285714286 
9 32929 48.828125  713 623.674691281028  2505 3648.30769230769  2496 3657.14285714286 

Когда я типа

means=colMeans(dati) 
Error in colMeans(dati) : 'x' must be numeric 

Для того, чтобы решить эту проблему, я преобразовать все в матрицу

datiM=data.matrix(dati) 

Но когда я проверяю новую переменную, значения данных отличаются

head(datiM) 
    Shimmer Shimmer.1 Shimmer.2 Shimmer.3 Shimmer.4 Shimmer.5 Shimmer.6 Shimmer.7 
4  370   1  10   1  65  65   1   1 
5  375  3707  10   1  46  46  24  24 
6  381  1025   9   2  48  48  24  24 
7  386  2162  10   1  36  36  21  21 
8  392  3126   8   3  23  23  19  19 
9  397  3229  10   1  25  25  19  19 

Мои вопросы здесь:

Как правильно преобразовать переменную dati для выполнения colMeans()?

ответ

1

В дополнение к @ akrun то совету, другой вариант заключается в преобразовании столбцов numeric себя (вместо того, чтобы read.csv сделать это):

dati <- data.frame(
    lapply(dataGSR[-c(1:3),-9],as.numeric)) 
## 
R> colMeans(dati) 
    Shimmer Shimmer.1 Shimmer.2 Shimmer.3 Shimmer.4 Shimmer.5 Shimmer.6 Shimmer.7 
33004.2924 18647.4609 707.4335 718.3989 2521.3626 3672.1383 2497.9013 3659.9287 

Где dataGSR считывали с использованием stringsAsFactors=F,

dataGSR <- read.csv(
    file="F:/temp/ShimmerData.csv", 
    header=TRUE, 
    stringsAsFactors=F) 

Если вы точно не знаете, что вам нужны character столбцы должны быть factor s, вы ar e лучше отключить эту опцию до FALSE.

1

Линии заголовка («символ») в наборе данных сначала занимают 4 строки. Мы могли бы skip 4 строки, использовать header=FALSE, а затем изменить имена столбцов на основе информации из первых 4 строк.

dataGSR <- read.csv('ShimmerData.csv', header=FALSE, 
      stringsAsFactors=FALSE, skip=4) 
lines <- readLines('ShimmerData.csv', n=4) 
colnames(dataGSR) <- do.call(paste, c(strsplit(lines, ','), 
     list(sep="_"))) 
dataGSR <- dataGSR[,-9] 

unname(colMeans(dataGSR)) 
# [1] 33004.2924 18647.4609 707.4335 718.3989 2521.3626 
#  3672.1383 2497.9013 
# [8] 3659.9287 

 Смежные вопросы

  • Нет связанных вопросов^_^