gpt4 book ai didi

r - 跨列和条件按行求和

转载 作者:行者123 更新时间:2023-12-02 17:56:46 25 4
gpt4 key购买 nike

我有一个包含 90 列(在示例中只有 6)和多行的数据框。我想按行对所有列求和,但仅当值为 4 或 5 时。在结果中,我想要实现条件的次数。我不知道如何在下面的代码中添加这个条件。

我需要任何帮助,谢谢。

df = data.frame(A = c(1,2,2,5,5,2,2,5,5,4,4,4,2,2,5), 
B = c(2,2,2,5,5,4,2,3,1,4,1,4,5,2,5),
C = c(5,3,3,5,5,2,1,5,5,1,1,4,1,2,5),
D = c(4,5,5,3,5,5,1,5,5,4,2,3,2,2,1),
E = c(1,2,2,2,5,2,5,3,3,4,4,4,2,2,1),
H = c(1,2,2,3,5,2,2,5,3,1,4,4,4,2,3))

> df
A B C D E H
1 1 2 5 4 1 1
2 2 2 3 5 2 2
3 2 2 3 5 2 2
4 5 5 5 3 2 3
5 5 5 5 5 5 5
6 2 4 2 5 2 2
7 2 2 1 1 5 2
8 5 3 5 5 3 5
9 5 1 5 5 3 3
10 4 4 1 4 4 1
11 4 1 1 2 4 4
12 4 4 4 3 4 4
13 2 5 1 2 2 4
14 2 2 2 2 2 2
15 5 5 5 1 1 3
library(dplyr)

df %>%
mutate(sum = rowSums(across(where(is.numeric))))

最佳答案

一个基本解决方案:

df$sum_4_5 <- apply(df, 1, \(x) sum(x[x %in% 4:5]))

dplyr 等效项:

library(dplyr)

df %>%
rowwise() %>%
mutate(sum_4_5 = c_across(everything()) %>% { sum(.[. %in% 4:5]) }) %>%
ungroup()

# # A tibble: 15 × 7
# A B C D E H sum_4_5
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 2 5 4 1 1 9
# 2 2 2 3 5 2 2 5
# 3 2 2 3 5 2 2 5
# 4 5 5 5 3 2 3 15
# 5 5 5 5 5 5 5 30
# ...

更新

如果你想获取每一行中4和5的个数,代码会更简单:

df %>%
mutate(sum_4_5 = rowSums(across(where(is.numeric), ~ .x %in% 4:5)))

# # A tibble: 15 × 7
# A B C D E H sum_4_5
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 2 5 4 1 1 2
# 2 2 2 3 5 2 2 1
# 3 2 2 3 5 2 2 1
# 4 5 5 5 3 2 3 3
# 5 5 5 5 5 5 5 6
# ...

关于r - 跨列和条件按行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75534759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com