r - 使用条件 For 循环对数据框中每一列的值求和
问题描述
所以我想通过一个数据集并根据我的第一列的条件对每一列的值求和。到目前为止的数据和我的代码如下所示:
x v1 v2 v3
1 0 1 5
2 4 2 10
3 5 3 15
4 1 4 20
for(i in colnames(data)){
if(data$x>2){
x1 <-sum(data[[i]])
}
else{
x2 <-sum(data[[i]])
}
}
我的假设是 for 循环会按名称从数据中调用每一列,然后根据它们是否匹配列 x 的条件来对每列中的值求和。
我想将每列中的一半值相加并将它们分配给一个值 x1,并对其余部分执行相同的操作,将其分配给 x2。我不断收到以下错误消息:
the condition has length > 1 and only the first element will be used
我做错了什么,有没有更好的方法来解决这个问题?理想情况下,我想要一个看起来像这样的表:
v1 v2 v3
x1 6 7 35
x2 4 3 15
解决方案
这是一个dplyr
解决方案。首先,我定义了数据框。
df <- read.table(text = "x v1 v2 v3
1 0 1 5
2 4 2 10
3 5 3 15
4 1 4 20", header = TRUE)
# x v1 v2 v3
# 1 1 0 1 5
# 2 2 4 2 10
# 3 3 5 3 15
# 4 4 1 4 20
然后,我创建一个标签 ( x_check
) 以根据您的标准 ( x > 2
) 指示每行属于哪个组,按此标签分组,并v
使用sum
.
# Load library
library(dplyr)
df %>%
mutate(x_check = ifelse(x>2, "x1", "x2")) %>%
group_by(x_check) %>%
summarise_at(vars(contains("v")), funs(sum))
# # A tibble: 2 x 4
# x_check v1 v2 v3
# <chr> <int> <int> <int>
# 1 x1 6 7 35
# 2 x2 4 3 15
推荐阅读
- postgresql - 是否可以在 PostgreSQL 9.4 的 PL/pgSQL 函数中执行 IF 条件?
- opc - 报警和事件的 OPC 连接
- c++ - clang-tidy 在修复时插入多个“覆盖”说明符
- c++ - 使用布尔数组从 1-16 分配值?
- python - TensorFlow while 循环,条件取决于主体
- java - 在选择的 Java 应用程序中找不到目标类
- java - java中的长数组声明初始化失败
- android - 为什么我会收到“配置‘编译’已过时”
- javascript - google-cloud TypeError:gcs.bucket 不是函数
- ios - IOS/Unity - Admob 广告显示印象但广告不可见?