当前位置: 首页 > 知识库问答 >
问题:

根据值是否大于该行中的另一个值对每一行使用函数

姚嘉容
2023-03-14

我试图用R来求一个数据帧中多个列(但不是全部)的总和。问题是我只想求大于该行值中值的值的总和,而忽略零。

下面是一个显示两行数据示例,其中 20 列,其中 6 列(列 x1:x6)具有我想考虑的总和值:

x1  x2  x3  x4  x5 x6
4   4   5   0   0  2
2   3   0   1   5  0

忽略零,第一行的中位数是4,第二行是2.5。所以我想求和剩下的数字

有许多行数据。我已经将中值(我只是使用 excel 来获取此值)放在另一列中,我将称之为 data$med_no_zero,因此可以使用它,而不必在 R 代码中计算该值。

我尝试过if/then语句、apply函数和其他一些东西,但是我对R和编码还很陌生,所以我一直被卡住。我在网上广泛搜索,但还没有找到一个例子,似乎做到了这一点。

共有2个答案

皇甫智明
2023-03-14

这里有一个替代方案,它使用rowSums来计算总和,并使用NA和指数的技巧将零转换为NA,以便它们可以在中值计算中删除。

rowSums(dat * (dat > apply(dat * NA^!dat, 1, median, na.rm=TRUE)))
[1] 5 8

apply(dat*NA^!dat,1,median,NA.rm=TRUE)计算每行的中值,通过使用dat*NA ^!dat</code>,然后使用<code>na。rm参数位于中值中。

然后dat

最后,我们将dat乘以该矩阵,以获得大于修改中值和其他地方0的dat值。结果被馈送到rowSums,后者计算每行的总数。

数据

dat <-
structure(list(x1 = c(4L, 2L), x2 = c(4L, 3L), x3 = c(5L, 0L), 
    x4 = 0:1, x5 = c(0L, 5L), x6 = c(2L, 0L)), .Names = c("x1", 
"x2", "x3", "x4", "x5", "x6"), class = "data.frame", row.names = c(NA, 
-2L))

宰父志新
2023-03-14

您可以对行(< code>MARGIN = 1)使用< code>apply来运行所需的函数

apply(X = df, MARGIN = 1, function(x)
    sum(x[x > median(replace(x, x==0, NA), na.rm = TRUE)], na.rm = TRUE))
#[1] 5 8
 类似资料:
  • 我试图用Python复制我的Stata代码,我被指向熊猫的方向。然而,我很难思考如何处理数据。 假设我想遍历列标题“ID”中的所有值。如果该ID与一个特定的数字匹配,那么我想更改两个相应的值FirstName和LastName。 在Stata,它看起来像这样: 因此,这将替换 FirstName 中与 ID == 103 到 Matt 的值对应的所有值。 在熊猫身上,我正在尝试这样的东西 不知道该

  • 问题内容: 如何构造一个mySQL查询以基于最大值删除行。 我试过了 但是有错误? 问题答案: 采用: 请注意,如果存在重复,则将删除 所有 具有该值的行。 关于1093错误的愚蠢之处在于,您可以通过在自引用之间放置一个子查询来解决它: 说明 MySQL仅在使用&语句时检查是否存在正在更新的同一表的一级子查询。这就是为什么将其放在第二级(或更深层)的子查询替代项中的原因。但这只是检查子查询- JO

  • 我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做

  • 我有数据库与表如图所示。 列包含重复的值,每个值必须计算在数据库中出现的次数。 如果计数为

  • 问题内容: 我有一个这样的字符串列表: 使用Y中的值对X进行排序以获取以下输出的最短方法是什么? 具有相同“键”的元素的顺序无关紧要。我可以求助于for结构的使用,但我好奇是否有更短的方法。有什么建议么? 问题答案: 最短代码 例: 一般来说 解释: 两个。 创建一个新的,list基于zip使用排序sorted()。 使用列表推导从排序的,压缩的中提取每对的第一个元素list。

  • 本文向大家介绍根据另一列中的DATE值执行MySQL UPDATE,包括了根据另一列中的DATE值执行MySQL UPDATE的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 现在让我们基于特定的DATE值(即2019-04-01此处)更新表- 让我们再次检查表记录- 这将产生以下输出-