gpt4 book ai didi

r - 拆分、应用和合并 2 列数据

转载 作者:行者123 更新时间:2023-12-02 19:28:47 25 4
gpt4 key购买 nike

我有一个由一组和 2 个值列组成的数据框,如下所示:

group  val1  val2
A 5 3
A 2 4
A 3 1
B 3 6
B 2 1
B 0 2

我想计算出 val1 > val2 的行数,按子集分割。最初我对每个子组进行了硬编码:

number_a <- nrow(subset(df, group=="A" & val1 > val2))
number_b <- nrow(subset(df, group=="B" & val1 > val2))

自动执行此操作的正确方法是什么?我尝试使用 split() 函数,但无法弄清楚如何传入 val1val2 列。

最佳答案

使用data.table非常简单

如果你想要行数

library(data.table)
setDT(df)[, .(RowsNum = sum(val1 > val2)), by = group]
# group RowsNum
# 1: A 2
# 2: B 1

如果您在基础 R 中寻找splitapply 组合,也可以尝试

sapply(split(df[-1], df[1]), function(x) sum(x[1] > x[2]))
# A B
# 2 1

或者使用tapply(也来自基础R)

tapply(with(df, val1 > val2), df[1], sum)
# group
# A B
# 2 1
<小时/>

如果您想要行本身

setDT(df)[, .SD[val1 > val2]]
# group val1 val2
# 1: A 5 3
# 2: A 3 1
# 3: B 2 1

或者使用基本 R 也非常简单

df[with(df, val1 > val2), ]
# group val1 val2
# 1 A 5 3
# 3 A 3 1
# 5 B 2 1

或者

subset(df, val1 > val2)
# group val1 val2
# 1 A 5 3
# 3 A 3 1
# 5 B 2 1

关于r - 拆分、应用和合并 2 列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27292223/

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