我有数据框,第一列作为分类标识符,第二列作为频率值,其余列作为原始数据计数.我想将所有计数列乘以频率列而不是前两列.
所有原始计数列都以大写字母开头,然后是句号,例如"L.abd",T.xyz等.
例如,如果我使用代码:
require(dplyr)
ID <- c(1,2,3,4,5,6)
Freq <- c(0.1,0.2,0.3,0.5,0.1,0.3)
L.abc <- c(1,1,1,3,1,0)
L.ABC <- c(0,3,2,4,1,1)
T.xyz <- c(1,1,1,1,0,1)
F.ABC <- c(4,5,6,5,3,1)
df <- as.data.frame(cbind(ID, Freq, L.abc, L.ABC, T.xyz, F.ABC))
df_new <- df %>% mutate_each(funs(.*Freq), starts_with("L."))
Run Code Online (Sandbox Code Playgroud)
我可以创建一个包含分类数据列的新数据框以及以"L"开头的列.已乘以相应的频率值.
有没有办法更改"starts_with"命令以选择以大写字母和句号开头的所有列?我尝试使用诸如"[AZ]"之类的修改来约会.没有成功.
提前致谢
对于这些情况,matches会更合适
df %>%
mutate_each(funs(.*Freq), matches("^[A-Z]\\.", ignore.case=FALSE))
Run Code Online (Sandbox Code Playgroud)
在这里,我假设您select只想要以大写字母(^[A-Z])后跟a 开头的列名..我们必须逃避.(\\.),否则它将被视为任何单个字符.
除了starts_with部分,我没有改变任何东西.在mutate_each如果我们需要传递一个功能,它可以在内部通过funs电话.在上面的代码中,我们将每个由('Freq'列.)选择的列()相乘matches.
根据 ?select
'matches(x,ignore.case = TRUE)':选择名称与正则表达式'x'匹配的所有变量
编辑:添加@docendodiscimus评论