用于标准计算的R中的CSV转换

用于标准计算的R中的CSV转换,r,csv,import,mean,R,Csv,Import,Mean,我在计算从导入的数据集的列平均值时遇到问题 我使用以下命令导入文件: 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

我在计算从导入的数据集的列平均值时遇到问题

我使用以下命令导入文件:

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()。我们可以
跳过这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

dataGSR除了@akrun的建议外,另一个选项是自己将列转换为
numeric
(而不是让
read.csv
执行):

除非您确定需要将
字符
列设置为
因子
s,否则最好将此选项设置为
FALSE

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 <- read.csv(
  file="F:/temp/ShimmerData.csv",
  header=TRUE,
  stringsAsFactors=F)