簡體   English   中英

如何將 function 應用於 dataframe 中的特定列並替換原始列?

[英]How do I apply a function to specific columns in a dataframe and replace the original columns?

我有一個包含醫療數據 ( my.medical.data ) 的大型 dataframe。
許多列包含日期(例如入院日期),每列的名稱以“_date”結尾。
I would like to apply the lubridate::dmy() function to the columns that contain dates and overwrite my original dataframe with the output of this function.
擁有一個可以使用任何 function 應用的通用解決方案會很棒,而不僅僅是我的dmy()示例。

本質上,我想將以下內容應用於我的所有日期列:

my.medical.data$admission_date <- lubridate::dmy(my.medical.data$admission_date)
my.medical.data$operation_date <- lubridate::dmy(my.medical.data$operation_date)
etc.

我試過這個:

date.columns <- select(ICB, ends_with("_date"))
date.names <- names(date.columns)
date.columns <- transmute_at(my.medical.data, date.names, lubridate::dmy)

現在date.columns包含我的日期列,采用“日期”格式,而不是原始因素。 現在我想用正確格式的新列替換my.medical.data中的日期列。

my.medical.data.new <- full_join(x = my.medical.data, y = date.columns)

現在我得到:

錯誤:無法將日期 object 與不是日期 object 的 object 連接起來

我有點像 R 新手,但我懷疑有更簡單的方法可以做到這一點(例如直接處理原始 dataframe),或者可能是加入/合並兩個數據幀的正確方法。

像往常一樣,沒有示例數據集很難回答,但這應該可以完成工作:

library(dplyr)

my.medical.data <- my.medical.data %>%
  mutate_at(vars(ends_with('_date')), lubridate::dmy)

這將改變以“_date”結尾的每個變量,應用 function。 它還可以應用多種功能。 請參閱?mutate_at (這也是mutate_if的幫助)

有幾種方法可以做到這一點。

如果您處理大量數據,我認為data.table是最好的方法(將為您帶來靈活性、速度和 memory 效率)

data.table

您可以使用:= (按引用更新運算符)與lapplỳ一起將lubridate::ymd應用於.SDcols維度中定義的所有列

library(data.table)
setDT(my.medical.data)

cols_to_change <- endsWith("_date", colnames(my.medical.date))

my.medical.data[, c(cols_to_change) := lapply(.SD, lubridate::ymd), .SDcols = cols_to_change]

底座 R

標准的lapply也可以提供幫助。 你可以嘗試類似的東西(我沒有測試過)

my.medical.data[, cols_to_change] <- lapply(cols_to_change, function(d) lubridate::ymd(my.medical.data[,d]))

暫無
暫無

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

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