我有一个包含多个包含日期的变量的df。 在这些变量中,有些报告多个日期,这些日期由格式符号分隔。 对于每个相关变量中的每个单元格,我想拆分字符串,将其重新格式化为数据,并选择最后一个日期。
数据
Private Sub cmdQuickLtr_Click()
Dim wApp As Word.Application
Set wApp = CreateObject("Word.Application")
wApp.DisplayAlerts = wdAlertsNone
Dim doc As Object
Set doc = wApp.Documents.Open(Me.tbLetterPath.Value)
doc.Content.Copy
doc.Close
'do something with the copied content
wApp.DisplayAlerts = wdAlertsAll
Set doc = Nothing
Set wApp = Nothing
End Sub
尝试输入的代码(1)错误:所有条目获取的是VAR MAX值,而不是CELL MAX值
data <- data.frame(ex=c(1,2),date_1 = c("30/12/1997\n22/12/1998","15/12/1993"), date_2 = c("21/03/1997\n11/04/1996\n11/04/1996\n11/04/1996\n11/04/1996",NA))
expected <- data.frame(ex=c(1,2),date_1 = c("1998-12-22","1993-12-15"), date_2 = c("1997-03-21",NA))
尝试输入代码(2)(嵌套错误)错误:代码在某些地方崩溃
data[grep("date",names(data),value = T)] <- lapply(data[grep("date",names(data),value = T)], function(x) max(as.Date(str_split(x,"\n")[[1]],format="%d/%m/%Y"), na.rm = T))
尝试输入的代码(3)(嵌套错误)错误:某些地方代码中断
data[grep("date",names(data),value = T)] <- lapply(data[grep("date",names(data),value = T)], function(y) max(y, lapply(data[grep("date",names(data),value = T)], function(x)
as.Date(str_split(x,"\n")[[1]],format="%d/%m/%Y"), na.rm = T)))
答案 0 :(得分:0)
我们可以使用:
data[-1] <- lapply(data[-1], function(y) sapply(strsplit(y ,"\n"),
function(x) max(as.Date(x, "%d/%m/%Y"))))
data[-1] <- lapply(data[-1], as.Date)
data
# ex date_1 date_2
#1 1 1998-12-22 1997-03-21
#2 2 1993-12-15 <NA>
逻辑与每列(第一列除外)所述的相同,我们在"\n"
上分割字符串,转换为日期并返回max
值。内部的sapply
循环返回日期的数字表示形式,因此我们使用另一个lapply
将数字转换为日期。