加载csv文件并每10行添加一次值

时间:2014-05-27 16:54:57

标签: r oop parsing csv

我想每10行做一次平均值,但我有一个小问题,我在csv中的值是这样的:

 a,b,c,d
 1,2,5,1.5
 1,3,6,2.5 
 1,4,8,4.5
 1,5,4,7.5
 1,8,2,8.5

我做了一个小函数来解决这个问题,用a,b,c得到了很好的结果,但是得到了d。

我得到0这是因为我的程序无法添加由"分隔的2个值。" ,如果它是","它将完美地工作。但这里的逗号用于分隔csv文件的值。

我不知道如何找出这个问题

谢谢。

您的所有解决方案都有效。

我对同一个问题有另一个问题,我怎么能用getter做同样的事情,例如:

我有课程测试,当我做吸气测试时[" d"]我会有:

An object of class "Test"
Slot "val":
[1] 35.9 35.9 35.9 35.9 35.9 

我该怎么做?

再次感谢您

3 个答案:

答案 0 :(得分:2)

您可以使用gsub"."更改为","

> # dat <- read.csv(text = "a,b,c,d
 # 1,2,5,1.5
 # 1,3,6,2.5 
 # 1,4,8,4.5
 # 1,5,4,7.5
 # 1,8,2,8.5")
> dat$d <- gsub("\\.", ",", as.character(dat$d))
> dat
#   a b c   d
# 1 1 2 5 1,5
# 2 1 3 6 2,5
# 3 1 4 8 4,5
# 4 1 5 4 7,5
# 5 1 8 2 8,5

不确定你的机器会对列d的类做什么,但在我的机器上它会成为一个字符向量。要将其直接强制转换为数字,请尝试

dat$d <- as.numeric(gsub("\\.", ",", as.character(dat$d)))

代替上面块中的dat$d <- gsub(...行。

答案 1 :(得分:1)

嗯,你的样本数据甚至没有10行,所以我每隔三行就会分组一次。我将通过伪造一个变量

来做到这一点
#sample input
dd <- data.frame(
    a = c(1, 1, 1, 1, 1), 
    b = c(2, 3, 4, 5, 8), 
    c = c(5, 6, 8, 4, 2), 
    d = c(1.5, 2.5, 4.5, 7.5, 8.5)
)

#grouping variable for every three lines
grp<-(seq.int(nrow(dd))-1) %/% 3 + 1

#use aggregate to calculate mean for groups
aggregate(.~grp, dd, mean)

答案 2 :(得分:1)

或者只是。

data1=read.table(header=TRUE,sep=",",text="a,b,c,d
1,2,5,1.5
1,3,6,2.5 
1,4,8,4.5
1,5,4,7.5
1,8,2,8.5")

data1
  a b c   d
1 1 2 5 1.5
2 1 3 6 2.5
3 1 4 8 4.5
4 1 5 4 7.5
5 1 8 2 8.5