我正在寻找一个整洁的解决以下问题。
我有以下示例数据集:
ex_tbl <- tibble(col1 = c(5, NA, NA, NA), col2 = c(1, 1.3, 0.8, 1.2))
我需要根据列2和列1中的前一个值填写NAs。如果我从第一个NA(第1列,第2行)开始,并且第2列大于1,那么我将把第1列的值(第1行)乘以第2列的值。那么如果col2小于等于1,那么col1正好等于前面的值。
这应该是最终结果:
col1 col2
5 1
6.5 1.3
6.5 0.8
7.8 1.2
我尝试了case_when()
但没有得到想要的结果:
output <- ex_tbl %>% mutate(col1 = case_when(col2 > 1 ~ col1 * col2,
col2 <= 1 ~ col1,
TRUE ~ col1)
显然,我没有捕获我想要使用前一行的值的部分。任何帮助都将不胜感激。
我们可能需要在这里累积
library(dplyr)
library(purrr)
ex_tbl %>%
mutate(coln = accumulate(col2, ~ if(.y <= 1) .x else .x * .y ,
.init = first(col1))[-1])
-输出
# A tibble: 4 × 3
col1 col2 coln
<dbl> <dbl> <dbl>
1 5 1 5
2 NA 1.3 6.5
3 NA 0.8 6.5
4 NA 1.2 7.8
也许你可以用
library(dplyr)
ex_tbl %>%
mutate(col1 = first(col1) * cumprod(pmax(col2, 1)))
要得到
# A tibble: 4 x 2
col1 col2
<dbl> <dbl>
1 5 1
2 6.5 1.3
3 6.5 0.8
4 7.8 1.2
如果您想在< code>col2的情况下乘以第三列的值
ex_tbl <- tibble(col1 = c(5, NA, NA, NA), col2 = c(1, 1.3, 0.8, 1.2), col3 = c(0.5, 2, 2, 0.3))
ex_tbl %>%
mutate(
factor = (col2 >= 1) * col2 + (col2 < 1) * col3,
col1 = first(col1) * cumprod((col2 >= 1) * col2 + (col2 < 1) * col3))
注意:这里的factor
列不是必需的。它只是显示cumprod
函数内部发生的事情。
问题内容: 我有这样的MySQL表 区域表 … 和学校表 我的注册表中有多个选择(下拉)菜单。区域下拉列表如下所示 我想做的是,获取“区域” ID,然后基于“学校”表中的ID(先前选择的ID)填充学校下拉菜单。我是JS的新手。请帮助我修复它。提前谢谢。 问题答案:
我正在尝试计算多个列的中值,但是我的数据有点奇怪。它看起来像下面的示例。 在表中到列表示该值的出现次数。我想计算中位数的出现次数。 例如对于ID = 1 是我想要创建的计算。 对于ID=2 我尝试过使用<code>rep()或<code>rep(10,2)),这就是我所期望的。我只是努力创建一个列表或向量,每个列都有重复。
我有一张800万行的大桌子。此表有15列带有数值,但这些值只能是0,并且只能是该列特有的另一个数值。我想根据特定值为这些列中的每一列创建两个新列。这些新值总是特定于列。 这是我的数据外观的虚拟示例: 这是我想要的输出 对应关系始终相同,即中1的值为,中2的值为,中3的值为。 我知道我可以用这样的东西 但我的真实数据有15列,需要大量的复制粘贴,有没有干净的方法?
我在 df 中有三列 我想在col1=x时执行以下操作,存储col2和col3的值,并在col1=y预期输出时将这些列值分配给下一行 任何帮助将不胜感激 注意:-火花 1.6
我想在两栏中填入缺少的值。根据预定义的类别1的最后日期(在先前填充的行中预定义),存在日期,类别2应填充另一行的值,例如: 数据示例: 因此,应根据< code>Cat1列- 中< code>cat值的最后存在日期,填写< code>Date列的< code>NaN。< code>Cat2列中的< code>NaN应由< code>mouse填写,作为已经为< code > Date -< cod
我有一个带有几列的。其中一列包含使用货币的符号,例如欧元或美元符号。另一列包含预算值。例如,在一行中,它可能意味着5000欧元的预算,而在下一行中,它可能意味着2000美元的预算。 在熊猫我想添加一个额外的列到我的DataFrame,正常化的欧元预算。所以基本上,对于每一行,如果货币列中的符号是欧元符号,新列中的值应该是预算列中的值*1,新列中的值应该是预算列的值*0.78125如果货币栏中的符号