簡體   English   中英

列出對包含字符串的變量的操作

[英]List operations on variables containing string

我必須承認,我對此一無所知,因此道歉沒有明確的嘗試,盡管希望我可以清楚地提出這個問題:

我有一個數據框列表。 對於所有這些變量,都需要將多個日期類型變量格式化為日期(例如as.Date(data $ var,format =“%m /%d /%y”))。

問題在於日期變量在每個數據框中的命名都不同。 在下面的示例中,我們有“ start_date”和“ end_date”。

有沒有一種方法可以寫一些對數據幀中的變量名進行操作的函數,如果它發現包含“日期”的文本,將進行格式化操作嗎?

數據框:

west <- data.frame(
    spend = sample(50:100,50,replace=T),
    trials = sample(100:200,50,replace=T),
    start_date = sample(c("06/07/14","06/08/14","06/09/14"), 50, replace=T),
    country = sample(c("usa","canada","uk"),50,replace = T)
    )

east <- data.frame(
    end_date = sample(c("06/07/14","06/08/14","06/09/14"), 50, replace=T),
    spend = sample(50:100,50,replace=T),
    trials = sample(100:200,50,replace=T),
    country = sample(c("china","japan","skorea"),50,replace = T)
    )

並將它們變成一個列表(實際上,這是一個更大的列表):

combined <- c(west,east)

如何從grepl語句中獲取邏輯向量,並告訴它對整個列表元素中邏輯向量為“ TRUE”的變量進行運算?

grepl("date", names(combined))

[1] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

嘗試

lst1 <- lapply(list(west, east), function(x) {
            indx <- grepl("date", names(x))
            x[,indx] <- as.Date(x[,indx], format="%m/%d/%y")
            x
      })

萬一您需要更新單個對象,即。 eastwest等。( write.csv/write.table ,因為大多數操作(包括使用write.csv/write.table將其保存到文件中)都可以使用lapply在列表中lapply

list2env(setNames(lst1, c("west", "east")), envir=.GlobalEnv) 

更新

如果date有多個變量

east <- data.frame( end_date = sample(c("06/07/14","06/08/14","06/09/14"), 50,
replace=T), new_date = sample(c("06/07/14","06/12/14","06/09/14"), 50,
replace=T),    spend = sample(50:100,50,replace=T), trials = 
sample(100:200,50,replace=T), country =
sample(c("china","japan","skorea"),50,replace = T)) 


lst2 <- lapply(list(west, east), function(x) {
                 indx <- grepl("date", names(x))
                 x[,indx] <- lapply(x[,indx,drop=FALSE], as.Date, format="%m/%d/%y")
                  x})

 lapply(lst2, head,2)
 #[[1]]
 #    spend trials start_date country
 #1    83    188 2014-06-09     usa
 #2    83    107 2014-06-08     usa

 #[[2]]
 #   end_date   new_date spend trials country
 #1 2014-06-08 2014-06-12    53    144   china
 #2 2014-06-08 2014-06-09   100    118   china

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM