我是R编程的新手,虽然我已经编程了许多其他语言多年。通过搜索R文档和堆栈溢出等,我很难找到关于这个简单问题的任何相关信息,所以非常感谢一些帮助。
这是问题所在: 在读取.csv的数据后,我需要创建一个新的数据集,其中只包含“value”字段介于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'
编辑:
以下是一些示例数据:
时间戳,siteid,sensorid,值
1月07日00:00:00太平洋标准时间2016,1,1,24
2016年1月7日00:00:00太平洋标准时间2016,1,2,5
2016年1月7日00:00:00太平洋标准时间2016,1,3,60
1月07日00:00:00太平洋标准时间2016,2,1,0
2016年1月7日00:00:00太平洋标准时间2016,2,2,5
1月07日00:00:00太平洋标准时间2016,2,3,100
1月07日00:00:00太平洋标准时间2016,3,1,36
2016年1月7日00:00:00太平洋标准时间2016,3,2,5
1月07日00:00:00太平洋标准时间2016,3,3,38
1月07日00:00:00太平洋标准时间2016,4,1,99
2016年1月7日00:00:00太平洋标准时间2016,4,2,5
2016年1月7日00:00:00太平洋标准时间2016,4,3,84
1月07日00:15:00太平洋标准时间2016,1,1,#ERROR#
1月07日00:15:00太平洋标准时间2016,1,2,5
2007年1月7日00:15:00太平洋标准时间2016,1,3,96
2007年1月7日00:15:00太平洋标准时间2016,2,1,28
2007年1月7日00:15:00太平洋标准时间2016,2,2,5
1月07日00:15:00太平洋标准时间2016,2,3,94
2007年1月7日00:15:00太平洋标准时间2016,3,1,3
1月07日00:15:00太平洋标准时间2016,3,2,5
1月07日00:15:00太平洋标准时间2016,3,3,95
1月07日00:15:00太平洋标准时间2016,4,1,72
2007年1月7日00:15:00太平洋标准时间2016,4,2,5
1月07日00:15:00太平洋标准时间2016,4,3,21
1月07日00:30:00太平洋标准时间2016,1,1,160
2016年1月7日00:30:00太平洋标准时间2016,1,2,5
1月07日00:30:00太平洋标准时间2016,1,3,34
答案 0 :(得分:0)
首先,总是试着给我们一些可重现的数据示例
data.beetween0and100 <- data[data$column.with.values => 0 & data$column.with.values <=100,]
这是如何获得具有所需值的数据。你也数据帧如何调整行和列,所以data [i]是坏的,但data [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])
}
}
答案 1 :(得分:0)
如果函数as.integer抛出错误,那么read.csv()可能没有以as.integer()可以处理的格式读取值。
使用str(data)或head()和tail()来查看read.csv()正在生成什么。#
查看您的示例数据,添加参数
na.strings = "#ERROR#"
to read.csv()可能会解决问题。
答案 2 :(得分:0)
对于初学者来说,R中的循环通常很慢,应谨慎使用。使用仅有2,500条记录的数据集可能不是问题,但如果您要开始使用更大的数据集,则值得一提。
如果您要进行大量数据操作,我建议您熟悉dplyr库https://cran.r-project.org/web/packages/dplyr/dplyr.pdf。它使数据操作变得非常快速和简单。
data<-data %>%
filter(values>0,values<100)