我是R编程的新手,尽管我已经编写了许多其他语言多年。通过搜索 R 文档和堆栈溢出等,我很难找到有关这个简单问题的任何相关信息,因此非常感谢一些帮助。
问题是这样的:从.csv读取数据后,我需要创建一个新数据集,该数据集仅包含"值"字段介于 0 和 100 之间的观测值(有 4 个字段和 ~2500 行数据)。我在读取数据并显示数据时没有问题。我的问题是当我尝试获取输入数据列表并根据"值"列的范围条件对其进行过滤时。
这是我的意见:
#read in the data from the sensor file
data = read.csv("C:/Code/sensor.txt", header=TRUE)
for (i in seq(4, nrow(data), 4)) {
if (as.integer(data[i])>0) {
print(data[i])
}
}
我得到错误输出:
> for (i in seq(4, nrow(data), 4)) {
+ if (as.integer(data[i])>0) {
+ print(data[i])
+ }
+ }
Error: (list) object cannot be coerced to type 'integer'
编辑:
下面是一些示例数据:
时间戳、站点 ID、传感器 ID、值
星期四 1月 07 00:00:00 PST 2016,1,1,24
星期四 1月 07 00:00:00 PST 2016,1,2,5
太平洋标准时间 2016,1,3,60
年 1 月 07 日星期四 00:00:001 月 07 日星期四 00:00:00 PST 2016,2,1,0
星期四 1月 07 00:00:00 PST 2016,2,2,5
太平洋标准时间 2016,2,3,100
年 1 月 07 日星期四 00:00:002016,3,1,36
年 1 月 07 日星期四 00:00:00 PST太平洋标准时间 2016,3,2,5
年 1 月 07 日星期四 00:00:002016,3,3,38
年 1 月 07 日星期四 00:00:00 PST2016,4,1,99
PST 1 月 07 星期四 00:00:002016,4,2,5
PST 1 月 07 星期四 00:00:002016,4,3,84
年 1 月 07 日星期四 00:00:00 PST星期四 1月 07 00:15:00 PST 2016,1,1,#错误#
星期四 1月 07 00:15:00 PST 2016,1,2,5
太平洋标准时间 2016,1,3,96 年 1 月 07 日星期四 00:15:00
2016,2,1,28
年 1 月 07 日星期四 00:15:00 PST1 月 07 日星期四 00:15:00 PST 2016,2,2,5
太平洋标准时间 2016,2,3,94 年 1 月 07 日星期四 00:15:00
1 月 07 日星期四 00:15:00 PST 2016,3,1,3
星期四 1月 07 00:15:00 PST 2016,3,2,5
1 月 07 日星期四 00:15:00 PST 2016,3,3,95
1 月 07 日星期四 00:15:00 PST 2016,4,1,72
星期四 1月 07 00:15:00 PST 2016,4,2,5
太平洋标准时间 2016,4,3,21
年 1 月 07 日星期四 00:15:00太平洋标准时间 2016,1,1,160
年 1 月 07 日星期四 00:30:001 月 07 日星期四 00:30:00 PST 2016,1,2,5
1 月 07 日星期四 00:30:00 PST 2016,1,3,34
首先,总是尝试给我们一些可复制的数据示例
data.beetween0and100 <- data[data$column.with.values => 0 & data$column.with.values <=100,]
通过这种方式获取具有所需值的数据。还有你的数据框如何区分行和列,所以数据[i]是坏的,但是,数据[i,]是数据帧的i行。
print(data[i,]) #will work
随您数据
#read 传感器文件中的数据
data = read.csv("C:/Code/sensor.txt", header=TRUE)
for (i in seq(4, nrow(data), 4)) {
if (as.integer(data[i,numberofvaluecolumn])>0) {
print(data[i,numberofvaluecolumn])
}
}
对于初学者来说,R 中的循环通常非常慢,应谨慎使用。 对于只有 2,500 条记录的数据集,这可能不是问题,但如果您要开始使用更大的数据集,则值得一提。
如果您要进行大量数据操作,我建议您熟悉dplyr库,https://cran.r-project.org/web/packages/dplyr/dplyr.pdf。 它使数据操作非常快速和容易。
data<-data %>%
filter(values>0,values<100)
如果函数 as.integer 抛出错误,那么 read.csv() 可能没有以 as.integer() 可以处理的格式读取值。
使用 str(data) 或 head() 和 tail() 查看 read.csv() 正在产生什么。
查看您的示例数据,添加参数
na.strings = "#ERROR#"
阅读.csv()可能会解决问题。