将提取的日期复制到行中,只要日期不变-R 3.1.1/Windows

将提取的日期复制到行中,只要日期不变-R 3.1.1/Windows,r,if-statement,for-loop,dataframe,R,If Statement,For Loop,Dataframe,我花了一段时间试图解决一个复印问题。我试图从数据框中提取日期,并将其复制到新行中,只要日期不变 我发现了一些关于不同问题的讨论,但在ifelse和for循环中没有得到正确的结果 数据来自以下站点: 数据是通过删除非页脚信息和添加列日期来清理的,VECCsample2是我使用的上面链接中的一个示例 data <- read.table('./VECCsample2.txt', sep = "", na.strings = "99999", fill=TRUE, header=FALSE, s

我花了一段时间试图解决一个复印问题。我试图从数据框中提取日期,并将其复制到新行中,只要日期不变

我发现了一些关于不同问题的讨论,但在ifelse和for循环中没有得到正确的结果

数据来自以下站点:

数据是通过删除非页脚信息和添加列日期来清理的,VECCsample2是我使用的上面链接中的一个示例

data <- read.table('./VECCsample2.txt', sep = "", na.strings = "99999", fill=TRUE, header=FALSE, stringsAsFactors=FALSE)

# removing unneeded rows
data <- data[data$V1 != "Station", ]
data <- data[data$V1 != "-----------------------------------------------------------------------------", ]
data <- data[data$V1 != "Showalter",]
data <- data[data$V1 != "Lifted",]
data <- data[data$V1 != "LIFT",]
data <- data[data$V1 != "SWEAT",]
data <- data[data$V1 != "K",]
data <- data[data$V1 != "Cross",]
data <- data[data$V1 != "Vertical",]
data <- data[data$V1 != "Observation",]
data <- data[data$V1 != "Totals",]
data <- data[data$V1 != "Convective",]
data <- data[data$V1 != "CAPE",]
data <- data[data$V1 != "CINS",]
data <- data[data$V1 != "Equilibrum",]
data <- data[data$V1 != "Level",]
data <- data[data$V1 != "LFCT",]
data <- data[data$V1 != "Bulk",]
data <- data[data$V6 != "Condensation",]
data <- data[data$V1 != "Mean",]
data <- data[data$V6 != "thickness:",]
data <- data[data$V1 != "Precipitable",]
data <- data[data$V1 != "hPa",]
data <- data[data$V1 != "PRES",]

# renaming headers
names(data) <- c("PRES", "HGHT", "TEMP", "DEWP", "RELH", "MIXR", "DRCT", "SKNT", "THTA", "THTE", "THTV") 
# adding empty date column 
data$date <- 0
我试图提取2014年1月1日的日期,并将其复制到日期列中。在读取分隔符VECC之前,需要复制2014年1月1日的数据。输出应该如下所示

row.names   PRES    HGHT    TEMP    DEWP    RELH    MIXR    DRCT    SKNT    THTA    THTE    THTV    date
1   1   42809.0 VECC    Calcutta    Observations    at  00Z 01  January 2014            0
2   5   1004.0  6   28.2    26.0    88  21.64   180 3   301.0   365.1   304.9   01 January 2014
3   6   1000.0  42  27.2    24.2    84  19.45   180 4   300.4   357.7   303.8   01 January 2014
4   7   978.0   239 25.4    22.5    84  17.85   180 11  300.4   353.0   303.6   01 January 2014
5   8   960.0   403 23.8    21.0    84  16.61   215 17  300.4   349.3   303.4   01 January 2014
6   9   950.0   496 30.4    18.4    49  14.22   235 21  308.0   351.4   310.7   01 January 2014
7   120 42809.0 VECC    Calcutta    Observations    at  00Z 02  January 2014            0
8   124 1005.0  6   26.2    23.3    84  18.30   45  2   298.9   352.5   302.2   02 January 2014
9   125 1000.0  50  25.0    20.5    76  15.43   60  6   298.1   343.2   300.9   02 January 2014
10  126 974.0   282 23.4    20.6    84  15.95   108 14  298.8   345.4   301.6   02 January 2014
11  127 965.0   364 23.5    20.8    85  16.35   125 17  299.7   347.7   302.6   02 January 2014
我尝试了if、ifelse和for循环的不同选项,但没有达到我想要的效果 提供最佳选择的方案是:

pattern = "VECC"
name_row <- grep(pattern, data$HGHT)
name_row_date <- data[name_row,]
if (grep(pattern, data$HGHT)) data$date <- name_row_date$DRCT

有没有人做过类似的练习或对如何解决这个问题有过提示


提前感谢。

您可以利用文档中的html标记执行以下操作,以获取日期

library(XML)
file<- "http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2015&MONTH=01&FROM=0100&TO=0312&STNM=VECC"
wx<- htmlTreeParse(file,useInternalNodes=T)
heads<- xpathSApply(xmlRoot(wx),"//h2",xmlValue)
h<-unlist(strsplit(heads," Observations at "))
sounding.dates<- strptime(h[!seq_along(h)%%2],"%HZ %d %b %Y",tz="GMT")
这给出了与表格测深相对应的日期向量


站点标识也在heads向量中。

谢谢,当我运行wx时,您是否从htmlTreeParse收到任何警告或错误?您是否将文件变量设置为URL?从HTMLtreeParse没有错误。我运行了getXMLerrors并返回“文档为空\n”。在将文件设置为URL时,您的意思是如上所述,对吗?我重新运行了代码,甚至更改了URL中的一些参数,以确保它没有以某种方式使用此文档的缓存。我答案中的代码似乎工作得很好。您是否存在连接问题?也许你的防火墙阻止了R?谢谢!它可以工作,正如你提到的,这确实是一个防火墙问题。输出为我提供了数据可用的日期,但是如何将这些日期复制到带有测量值的行后面呢?目的是分析每天的天气差异。
for (index in 1:nrow(data)) { 
    row = data[index, ] 

    if (row[index,3] == "VECC") {
        date <- row[row$SKNT,]
        data$date <- "NA"
    }
    if (row[index,3] != "VECC")
        data$date <- date
}
library(XML)
file<- "http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2015&MONTH=01&FROM=0100&TO=0312&STNM=VECC"
wx<- htmlTreeParse(file,useInternalNodes=T)
heads<- xpathSApply(xmlRoot(wx),"//h2",xmlValue)
h<-unlist(strsplit(heads," Observations at "))
sounding.dates<- strptime(h[!seq_along(h)%%2],"%HZ %d %b %Y",tz="GMT")