簡體   English   中英

在具有特定名稱的列上應用函數

[英]apply a function on columns with specific names

我是R語言的新手。我有數百個這樣的數據幀

ID  NAME    Ratio_A Ratio_B Ratio_C Ratio_D
AA  ABCD    0.09    0.67    0.10    0.14
AB  ABCE    0.04    0.85    0.04    0.06
AC  ABCG    0.43    0.21    0.54    0.14
AD  ABCF    0.16    0.62    0.25    0.97
AF  ABCJ    0.59    0.37    0.66    0.07

這只是一個例子。 在數據幀之間, Ratio_列的數量和名稱不同,但是它們都以Ratio_ 我想將一個函數(例如log(x) )應用於Ratio_列,而不指定列號或全名。

我知道如何通過df進行df轉換,對於示例中的一個:

A <- function(x) log(x)
df_log<-data.frame(df[1:2], lapply(df[3:6], A))

但是我有很多,而且正如我所說的,每列的數量是不同的。

有什么建議嗎?

謝謝

將數據集放在list ,然后遍歷list元素

lapply(lst, function(x) {i1 <- grep("^Ratio_", names(x));
                         x[i1] <- lapply(x[i1], A)
                          x})

注意:不使用外部包裝。

數據

lst <- mget(paste0("df", 1:100))

使用dplyr軟件包可以很容易地解決這種類型的問題。 例如,

df <- read.table(text = 'ID  NAME    Ratio_A Ratio_B Ratio_C Ratio_D
                         AA  ABCD    0.09    0.67    0.10    0.14
                         AB  ABCE    0.04    0.85    0.04    0.06
                         AC  ABCG    0.43    0.21    0.54    0.14
                         AD  ABCF    0.16    0.62    0.25    0.97
                         AF  ABCJ    0.59    0.37    0.66    0.07', 
                 header = TRUE)

library(dplyr)

df_transformed <- mutate_each(df, funs(log(.)), starts_with("Ratio_"))

df_transformed
# > df_transformed
# ID NAME    Ratio_A    Ratio_B    Ratio_C     Ratio_D
# 1 AA ABCD -2.4079456 -0.4004776 -2.3025851 -1.96611286
# 2 AB ABCE -3.2188758 -0.1625189 -3.2188758 -2.81341072
# 3 AC ABCG -0.8439701 -1.5606477 -0.6161861 -1.96611286
# 4 AD ABCF -1.8325815 -0.4780358 -1.3862944 -0.03045921
# 5 AF ABCJ -0.5276327 -0.9942523 -0.4155154 -2.65926004

暫無
暫無

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

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