从dplyr使用mutate_each函数时选择特定列

时间:2015-08-04 11:31:54

标签: r dplyr

我有数据框,第一列作为分类标识符,第二列作为频率值,其余列作为原始数据计数。我想将所有计数列乘以频率列而不是前两列。

所有原始计数列都以大写字母开头,然后是句号,例如" 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."))        

我可以创建一个新的数据框,其中包含分类数据列以及以&#34; L开头的列。&#34;已乘以相应的频率值。

有没有办法改变&#34; starts_with&#34;命令选择以大写字母和句号开头的所有列?我尝试使用&#34; [A-Z]等修改约会。&#34;没有成功。

提前致谢

2 个答案:

答案 0 :(得分:7)

对于这些情况, NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[path stringByAppendingPathComponent:@"/com.apple.nsurlsessiond/Downloads/com.xxx.xxx/"] error:nil]; for (NSString *string in array) { [[NSFileManager defaultManager] removeItemAtPath:[path stringByAppendingPathComponent:[NSString stringWithFormat:@"/com.apple.nsurlsessiond/Downloads/com.xxx.xxx/%@", string]] error:nil]; } 会更合适

NSString *path = NSTemporaryDirectory();
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
for (NSString *string in array) {
    [[NSFileManager defaultManager] removeItemAtPath:[path stringByAppendingPathComponent:string] error:nil];
}

在这里,我假设你只想matches只有以大写字母( df %>% mutate_each(funs(.*Freq), matches("^[A-Z]\\.", ignore.case=FALSE)) )开头,后跟select的列名。我们必须逃避^[A-Z].),否则它将被视为任何单个字符。

.部分外,我没有改变任何事情。在\\.中,如果我们需要传递一个函数,它可以在starts_with调用内传递。在上面的代码中,我们将mutate_each选择的每个列(funs)乘以&#39; Freq&#39;列。

根据.

  

'matches(x,ignore.case = TRUE)':选择其所有变量             name匹配正则表达式'x'

编辑:添加了@docendodiscimus评论&#39>

答案 1 :(得分:3)

我刚刚回复了来自其他用户的a related questionmutate_each将被弃用,而不是mutate_at

在您的情况下,等效代码为:

df %>% mutate_at(.cols=vars(matches("^[A-Z]\\.", ignore.case=FALSE)), .funs=funs(.*Freq))

ID Freq L.abc L.ABC T.xyz F.ABC 1 1 0.1 0.1 0.0 0.1 0.4 2 2 0.2 0.2 0.6 0.2 1.0 3 3 0.3 0.3 0.6 0.3 1.8 4 4 0.5 1.5 2.0 0.5 2.5 5 5 0.1 0.1 0.1 0.0 0.3 6 6 0.3 0.0 0.3 0.3 0.3