列中的 Rowwise Mean 包含除最后一列之外的词
Rowwise Mean in columns contain word except last column
我正在尝试获取名称中包含特定单词的列的平均值,但最后一列名称中包含相同单词的列除外,示例
df <- data.frame( ABC_1 = runif(3),
ABC_2 = runif(3),
ABC_3 = runif(3),
ABC_4 = runif(3) )
这里我得到最后一列包含单词:ABC 的值,在 col: max
df2=df %>%
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE)))
ABC_1 ABC_2 ABC_3 ABC_4 max
<dbl> <dbl> <dbl> <dbl> <dbl>
1 0.191 0.486 0.455 0.246 0.246
2 0.523 0.728 0.812 0.517 0.517
3 0.134 0.937 0.992 0.899 0.899
使用相同的逻辑,现在我尝试获取名称为 ABC 的所有列的平均值,最后一列除外:
df3=df %>%
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE))) %>%
mutate_at(vars(-last(contains('ABC'))), funs(mean= mean(., na.rm = TRUE)))
但遗憾的是我没有得到预期的结果:
ABC_1 ABC_2 ABC_3 ABC_4 max ABC_1_mean ABC_2_mean ABC_3_mean max_mean
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.191 0.486 0.455 0.246 0.246 0.191 0.486 0.455 0.246
2 0.523 0.728 0.812 0.517 0.517 0.523 0.728 0.812 0.517
3 0.134 0.937 0.992 0.899 0.899 0.134 0.937 0.992 0.899
一个选项可以是:
df %>%
mutate(ABC_mean = rowMeans(across(head(starts_with("ABC"), -1))))
ABC_1 ABC_2 ABC_3 ABC_4 ABC_mean
1 0.5957359 0.7201537 0.1304605 0.1697986 0.4821167
2 0.6865635 0.9463447 0.8447037 0.4149000 0.8258706
3 0.2364415 0.8335135 0.6342009 0.4410836 0.5680520
我正在尝试获取名称中包含特定单词的列的平均值,但最后一列名称中包含相同单词的列除外,示例
df <- data.frame( ABC_1 = runif(3),
ABC_2 = runif(3),
ABC_3 = runif(3),
ABC_4 = runif(3) )
这里我得到最后一列包含单词:ABC 的值,在 col: max
df2=df %>%
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE)))
ABC_1 ABC_2 ABC_3 ABC_4 max
<dbl> <dbl> <dbl> <dbl> <dbl>
1 0.191 0.486 0.455 0.246 0.246
2 0.523 0.728 0.812 0.517 0.517
3 0.134 0.937 0.992 0.899 0.899
使用相同的逻辑,现在我尝试获取名称为 ABC 的所有列的平均值,最后一列除外:
df3=df %>%
rowwise() %>%
mutate_at(vars(last(contains('ABC'))), funs(max= max(., na.rm = TRUE))) %>%
mutate_at(vars(-last(contains('ABC'))), funs(mean= mean(., na.rm = TRUE)))
但遗憾的是我没有得到预期的结果:
ABC_1 ABC_2 ABC_3 ABC_4 max ABC_1_mean ABC_2_mean ABC_3_mean max_mean
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.191 0.486 0.455 0.246 0.246 0.191 0.486 0.455 0.246
2 0.523 0.728 0.812 0.517 0.517 0.523 0.728 0.812 0.517
3 0.134 0.937 0.992 0.899 0.899 0.134 0.937 0.992 0.899
一个选项可以是:
df %>%
mutate(ABC_mean = rowMeans(across(head(starts_with("ABC"), -1))))
ABC_1 ABC_2 ABC_3 ABC_4 ABC_mean
1 0.5957359 0.7201537 0.1304605 0.1697986 0.4821167
2 0.6865635 0.9463447 0.8447037 0.4149000 0.8258706
3 0.2364415 0.8335135 0.6342009 0.4410836 0.5680520