首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标准计算用R中的CSV转换

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

Stack Overflow用户
提问于 2015-02-13 16:04:12
回答 2查看 83关注 0票数 0

我在计算从这个CSV文件导入的数据集的列平均值时遇到了问题

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

代码语言:javascript
运行
复制
dataGSR = read.csv("ShimmerData.csv", header = TRUE, sep = ",",stringsAsFactors=T)
dataGSR$X=NULL #don't need this column

然后取其中的一个子集

代码语言:javascript
运行
复制
dati=dataGSR[4:1000,]

我看他们是对的

代码语言:javascript
运行
复制
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

当我打字时

代码语言:javascript
运行
复制
means=colMeans(dati)
Error in colMeans(dati) : 'x' must be numeric

为了解决这个问题,我把所有的东西都转换成一个矩阵。

代码语言:javascript
运行
复制
datiM=data.matrix(dati)

但是,当我检查新变量时,数据值是不同的。

代码语言:javascript
运行
复制
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()?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 16:21:30

除了@akrun的建议之外,另一种选择是自己将列转换为numeric (而不是让read.csv来完成):

代码语言:javascript
运行
复制
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

dataGSRstringsAsFactors=F一起读的地方,

代码语言:javascript
运行
复制
dataGSR <- read.csv(
  file="F:/temp/ShimmerData.csv",
  header=TRUE,
  stringsAsFactors=F)

除非您确信需要character列作为factor,否则最好将此选项设置为FALSE

票数 1
EN

Stack Overflow用户

发布于 2015-02-13 16:12:43

数据集中的标题行(“字符”)跨越前4行。我们可以使用skip 4行,使用header=FALSE,然后根据前4行的信息更改列名。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28503695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档