You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中自动生成含指定元素汇总结果的dataframe

解决方法:筛选含"E3"的行并对number列求和

先提个小细节:你初始代码里用cbind构建数据框会把所有列转成字符类型,这会导致后面没法正常对number列求和,所以第一步得先把number列转回数值型(或者直接不用cbind构建数据框)。下面是完整的实现步骤:

1. 修正并构建初始数据框

v1 <- c("E1","E2","E3")
v2 <- c("E2","E3",NA)
v3 <- c("E3","E5",NA)
number <- c(100, 200, 300)
# 直接传入列名构建数据框,自动保留各列的原始类型
test <- data.frame(v1, v2, v3, number)

# 如果已经用了cbind导致number列是字符型,执行下面的转换:
# test$number <- as.numeric(test$number)

2. 筛选所有包含"E3"的行

我们可以用apply遍历每一行,检查v1/v2/v3列里是否存在"E3",再筛选出符合条件的行生成result数据框:

# 标记每行是否包含"E3"(na.rm=TRUE忽略NA值的影响)
has_E3 <- apply(test[, c("v1", "v2", "v3")], 1, function(x) any(x == "E3", na.rm = TRUE))
# 筛选出符合条件的行
result <- test[has_E3, ]

3. 对number列求和

直接对result里的number列求和即可,结果和你预期的100+200+300=600一致:

sum_E3 <- sum(result$number)
# 也可以把求和结果添加到result数据框里
result$total_E3 <- sum_E3

完整可运行代码

# 构建初始数据框
v1 <- c("E1","E2","E3")
v2 <- c("E2","E3",NA)
v3 <- c("E3","E5",NA)
number <- c(100, 200, 300)
test <- data.frame(v1, v2, v3, number)

# 筛选含"E3"的行
has_E3 <- apply(test[, 1:3], 1, function(x) any(x == "E3", na.rm = TRUE))
result <- test[has_E3, ]

# 计算number列总和
sum_result <- sum(result$number)
print(sum_result)  # 输出:600

内容的提问来源于stack exchange,提问作者meilirog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:19