我想每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
我该怎么做?
再次感谢您
答案 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