![](/img/trans.png)
[英]How to apply the same function over a series of columns with a specific string in their names?
[英]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.