我有以下数据框:
df <- data.frame(
month=c("July", "August", "August"),
day=c(31, 1, 2),
time=c(12, 12, 12))
month day time
1 July 31 12
2 August 1 12
3 August 2 12
我有一个文本文件(十进制格式),我想用文本文件中的所有时间替换“时间”列。文本文件中有多天,每个都有300多条记录。
7-31-2016 #the days are all concatenated together, this line represents the beginning of one day (July 31)
13.12344
13.66445
13.76892
...
8-1-2016 #here is another day (August 1)
14.50333
14.52000
14.53639
...
但是,文本文件比当前数据帧长得多 - 它有393条记录。所以我希望结果数据框看起来像这样:
month day time
5 July 31 13.12344
6 July 31 13.66445
7 July 31 13.76892
.....
393 August 1 14.50333
394 August 1 14.52000
394 August 1 14.53639
基本上我只需要能够扩展当前的数据帧以匹配新文件中的记录数,同时保持同一天。希望这是有道理的。
答案 0 :(得分:2)
# Create txt data
txt <- data.frame(x = c('7-31-2016', '13.12344', '13.66445', '13.76892', '8-1-2016', '14.50333', '14.52000', '14.53639'))
# Load Your data
df <- data.frame(
month=c("July", "August", "August"),
day=c(31, 1, 2),
time=c(12, 12, 12))
# Need a year to join dates
df$year <- 2016
# Create date column
df$date <- as.Date(paste0(df$month, "/", df$day, "/", df$year), format = "%B/%d/%Y")
# Find values with dashes, then replaces with /
txt$dash <- grepl('-', txt$x)
txt$x <- gsub("-", "/", txt$x)
# Adds new columns
library(dplyr)
txt <- mutate(txt, date = ifelse(dash==TRUE, as.Date(x, format = "%m/%d/%Y"), NA))
txt <- mutate(txt, time = ifelse(dash==FALSE, as.numeric(x), NA))
# Fill down values
library(zoo)
txt$date <- na.locf(txt$date)
# Removes NA and keeps necessary columns
txt <- txt[!is.na(txt$time),]
txt <- txt[c("date", "time")]
# Merge
output <- merge(df, txt, by = "date")
答案 1 :(得分:0)
因此,您希望合并现有的仅包含3行的data.frame function updateState(e, validateName, validateEmail, validateAddress) {
var data = e.target.value;
if (validateName(data.name) && validateEmail(data.mail) && validateAddress(data.address) {
//Do some stuff
}
}
和df
,其中包含许多行。使用:
new_text
有关详细信息,请参阅merge(df, new_text, all.y = T) #all.y will interpolate new rows for the ones that don't match
。
答案 2 :(得分:0)
将txt文件转换为可合并的dataframe
:
df$V2=as.numeric(df$V1)
Temp=is.na(df$V2)
df$V2=NA
df$V2[Temp]=df$V1[Temp]
df$V2=na.locf(df$V2)
df=df[!Temp,]
V1 V2
2 13.12344 7/31/2016
3 13.66445 7/31/2016
4 13.76892 7/31/2016
6 14.50333 8/1/2016
7 14.52 8/1/2016
8 14.53639 8/1/2016