0
如果有一個數據幀:應用不同的功能將數據幀列取決於列名相匹配的模式
l$`__a` <- data.frame(`__ID` = stringi::stri_rand_strings(10, 1),
col = stringi::stri_rand_strings(10, 1), check.names = F)
和兩個配套功能:
prefixColABC <- function(dfCol) {
paste0("ABC_", dfCol)
}
prefixColDEF <- function(dfCol) {
paste0("DEF_", dfCol)
}
如何申請第一功能對於數據幀列名稱盯着__
和第二個所有其他列?
爲了解決這個問題,我想我會第一子組中的所有列與開始__
名稱,適用prefixColABC
給他們,然後子集中的所有其他人,並應用prefixColDEF
給他們。然後我會使用cbind()
將所有列重新組合到一個數據框中。
下面是我的一些進展:
這裏的第一個功能是如何被應用到所有列:
as.data.frame(apply(l$`__a`, 2, prefixColABC))
而這裏的我怎麼能子集的列。所有與列名以__
:
l$`__a`[ grep(pattern = "^__", l$`__a`), 1 ]
我不知道如何子集不匹配該模式的所有其他列。我不知道如何設置了適用聲明
我認爲這個問題是相似的礦井內的情況,但不會選擇基於模式匹配的列: R Applying different functions to different data frame columns
你的解決方案是非常有幫助,謝謝!我試圖調整它不覆蓋原始數據框。你能幫我解決嗎?我現在試圖用這種方式創建一個具有相同結構的空數據框:'dd2 < - dd [0,]',然後用'apply'命令的數據填充它,但是我收到了這個錯誤「替換元件1具有10行以替換0行「。我是否應該使用'vapply'來確保我總是獲得一個列向量以插入數據框? – Bobby
我也試着編寫一個函數,它使用你的例子,但它沒有像我期望的那樣返回一個包含兩列的數據框。你有任何關於這個給予的提示嗎? 012f 'processOneDF < - function(dfName){dfName [「__ID」] < - lapply(dfName [,'__ID「,drop = FALSE],prefixColABC) dfName [」col「] < - lapply(dfName [ 「col」,drop = FALSE],prefixColDEF) } l5 < - l l5 $'__a' < - processOneDF(l5 $'__a') – Bobby