在子集化时返回空数据表

时间:2017-08-01 21:12:56

标签: r

我正在与其他人的代码合作并重新运行它以拼凑他们所做的事情。好像我正在运行的这部分代码返回一个空的data.table,这并不理想。可以运行下面的代码。

url = "http://www.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ensoyears.shtml" 
page <- readLines(url)
ONI_data_raw <- data.table (readHTMLTable(page, which=8))
headers <- c ("Year", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
setnames(ONI_data_raw, headers)
ONI_data_raw = melt(ONI_data_raw, id.vars = "Year")
names(ONI_data_raw)[2] = "Month"
names(ONI_data_raw)[3] = "ONI_Value"
ONI_data_raw$Month = as.numeric(ONI_data_raw$Month)
ONI_data_raw$ONI_Value= as.numeric(ONI_data_raw$ONI_Value)
ONI_data_raw = subset(ONI_data_raw, ONI_data_raw$Year %in% time )
head(ONI_data_raw)

我得到的结果是:

Empty data.table (0 rows) of 3 cols: Year,Month,ONI_Value

理想情况下,我希望看到的是这样的:

Year          Jan           Feb          March    etc. 
1950         -1.4          -1.2          -1.1
1951         -0.8          -0.6          -0.2

我认为这是代码的目标,但是如果你运行第三行到最后一行(在它是子集之前),输出就是那种时髦

    Year Month ONI_Value
 1: 1950     1      -1.4
 2: 1951     1      -0.8
 3: 1952     1       0.5
 4: 1953     1       0.5
 5: 1954     1       0.7
 6: 1955     1      -0.6
 7: 1956     1      -0.9
 8: 1957     1      -0.3
 9: 1958     1       1.7
10: 1959     1       0.6
11: Year     1        NA
12: 1960     1      -0.1

第11行是奇数。还有几行也可以这样做。不确定是否会导致问题,但是一旦第二行到最后一行被运行 - 数据表就会变空。

任何见解都会有所帮助!

1 个答案:

答案 0 :(得分:1)

这一行中的“时间”是什么?

ONI_data_raw = subset(ONI_data_raw, ONI_data_raw$Year %in% time )

如果我假设时间= c(1950,1951),你需要使用tydir包中的扩散函数

spread(ONI_data_raw, Month, ONI_Value)

你说的问题可能是由这个子集行引起的。