小编Ano*_*n R的帖子

基于值数据类型转置 pandas DF

我有 pandas DataFrameA。我正在努力将其转换为我想要的格式,请参阅DataFrameB。我尝试过pivotmelt但我不确定如何使其成为有条件的(string值 to FIELD_STR_VALUEnumeric值 to FIELD_NUM_VALUE)。我希望你能为我指明正确的方向。

A:输入数据框

|FIELD_A |FIELD_B |FIELD_C |FIELD_D |
|--------|--------|--------|--------|
|123123  |8       |a       |23423   |
|123124  |7       |c       |6464    |
|123144  |99      |x       |234     |
Run Code Online (Sandbox Code Playgroud)

B:所需的输出数据帧

|ID |FIELD_A |FIELD_NAME |FIELD_STR_VALUE |FIELD_NUM_VALUE |
|---|--------|-----------|----------------|----------------|
|1  |123123  |B          |                |8               |
|2  |123123  |C          |a               |                |
|3  |123123  |D          |                |23423           |
|4  |123124  |B          |                |7               |
|5  |123124  |C          |c               |                | …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

6
推荐指数
1
解决办法
162
查看次数

(1-previous_record)*current_record 的累积积

数据框包含两个变量 ( timeand rate) 和 10 个观测值

time <- seq(1:10) 
rate <- 1-(0.99^time)
dat <- data.frame(time, rate)
Run Code Online (Sandbox Code Playgroud)

我需要添加一个新列(称为new_rate)。

new_rate 定义如下

注意:new_rate_1是new列new_rate等的第一次观察。

new_rate_1 = rate_1
new_rate_2 = (1-rate_1)*rate_2
new_rate_3 = (1-rate_1)*(1-rate_2)*rate_3
new_rate_4 = (1-rate_1)*(1-rate_2)*(1-rate_3)*rate_4
...
new_rate_10 = (1-rate_1)*(1-rate_2)*(1-rate_3)*(1-rate_4)*(1-rate_5)*(1-rate_6)*(1-rate_7)*(1-rate_8)*(1-rate_9)*rate_10
Run Code Online (Sandbox Code Playgroud)

如何在基础 Rdplyr?

iteration r accumulate dplyr rolling-computation

5
推荐指数
1
解决办法
135
查看次数

使用 pmap 迭代 tibble 的行

我有一个非常简单的 tibble,我想迭代它的行以使用 function 来应用函数pmap。我想我可能误解了pmap函数上的一些观点,但我大多很难选择参数。所以我想知道rowwise在这种情况下我是否应该使用函数pmap。不过我还没见过案例。另一个问题是选择要使用列表或select函数进行迭代的变量:

# Here is my tibble
# Imagine I would like to apply a `n_distinct` function with pmap on it every rows

df <-  tibble(id = c("01", "02", "03","04","05","06"),
                  A = c("Jan", "Mar", "Jan","Jan","Jan","Mar"),
                  B = c("Feb", "Mar", "Jan","Jan","Mar","Mar"),
                  C = c("Feb", "Mar", "Feb","Jan","Feb","Feb")
)

# It is perfectly achievable with `rowwise` and `mutate` and results in my desired output

df %>%
  rowwise() %>%
  mutate(overal = n_distinct(c_across(A:C))) …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr rowwise

5
推荐指数
1
解决办法
1020
查看次数

R根据行中的值在列中重复

我有一个如下所示的数据框:

Name    School   Weight Days
Antoine Bach     0.03   5
Antoine Ken      0.02   7
Barbara Franklin 0.04   3
Run Code Online (Sandbox Code Playgroud)

我想获得如下输出:

Name    School   1    2    3    4    5    6    7
Antoine Bach     0.03 0.03 0.03 0.03 0.03 NA   NA
Antoine Ken      0.02 0.02 0.02 0.02 0.02 0.02 0.02
Barbara Franklin 0.04 0.04 0.04 NA   NA   NA   NA
Run Code Online (Sandbox Code Playgroud)

可重现的样本数据:

df <- tribble(
  ~Name,    ~School,   ~Weight, ~Days,
  "Antoine", "Bach",     0.03,   5,
  "Antoine", "Ken",      0.02,   7,
  "Barbara", "Franklin", 0.04,   3
)

Run Code Online (Sandbox Code Playgroud)

r repeat dataframe long-integer

5
推荐指数
2
解决办法
84
查看次数

R:传递多个参数来累加/减少

这与R有关:使用上一行新生成的数据

我意识到我面临的实际问题比我在上面线程中给出的示例要复杂一些 - 似乎我必须将 3 个参数传递给递归计算才能实现我想要的。因此,accumulate2reduce可能不起作用。所以我在这里提出一个新问题以避免可能的混淆。

我有以下按 ID 分组的数据集:

ID <- c(1, 2, 2, 3, 3, 3)
pw <- c(1:6)
add <- c(1, 2, 3, 5, 7, 8)
x <- c(1, 2, NA, 4, NA, NA)
df <- data.frame(ID, pw, add, x)

df
  ID pw add  x
1  1  1   1  1
2  2  2   2  2
3  2  3   3 NA
4  3  4   5  4
5  3  5   7 NA
6 …
Run Code Online (Sandbox Code Playgroud)

iteration r accumulate rolling-computation

5
推荐指数
2
解决办法
222
查看次数

如何创建一个函数来改变具有变量名和“_pct”的新列?

mtcars作为例子使用。我想编写一个创建函数countpct列,如下面-

library(tidyverse)

mtcars %>% 
  group_by(cyl) %>% 
  summarise(count = n()) %>% 
  ungroup() %>% 
  mutate(cyl_pct = count/sum(count))
Run Code Online (Sandbox Code Playgroud)

这会产生输出 -

# A tibble: 3 x 3
    cyl count mpg_pct
  <dbl> <int>   <dbl>
1     4    11   0.344
2     6     7   0.219
3     8    14   0.438
Run Code Online (Sandbox Code Playgroud)

但是,我想创建一个函数,在该函数中我可以将group_by列指定为任何列,并且该mutate列将命名groub_by_pct. 因此,如果我想使用disp,disp将是我的group_by变量,并且该函数将改变一disp_pct列。

r tidyeval

5
推荐指数
2
解决办法
78
查看次数

基于至少一个共同值对 Id 进行分组

我有一个列表,其元素是整数,如果这些元素至少共享一个值,我想累积这些元素。对于那些与其他元素不共享任何价值观的元素,我希望它们保持原样。这是我的样品日期:

x <- list(c(1, 2), c(1, 2, 3), c(2, 3, 4), c(3, 4, 5), c(4, 5, 8), c(6, 9, 7), 7, c(5, 8), 10, 11)
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出:

desired_reult <- list(c(1, 2, 3, 4, 5, 8), 
                      c(6, 9, 7), 
                      10, 
                      11)
Run Code Online (Sandbox Code Playgroud)

我想先用reduceaccumulate函数来做,purrrtidyverse欢迎任何其他解决方案。到目前为止,我已经尝试过这个解决方案,但它只给了我一个union,显然放弃了其余的:

x %>% 
  reduce(~ if(any(.x %in% .y)) union(.x, .y) else .x)

[1] 1 2 3 4 5 8
Run Code Online (Sandbox Code Playgroud)

一般来说,我正在寻找一种将整数 (id) 与常见值(如某种聚类)进行分组的方法,但不幸的是,到目前为止,我的努力都是徒劳的。

非常感谢您提前提供帮助。

reduce r accumulate purrr

5
推荐指数
1
解决办法
101
查看次数

R,dplyr:如何根据其他列中的 NA 值将一列中的值更改为 NA(使用 OR 运算符)

这个问题很难用标题行来表达,但它与通常的“如何根据另一列中的值更改一列中的值”不同。有两个问题我在其他地方没有看到处理过:1)我正在处理 NA,而不是值,2)我正在处理涉及多个列之间 OR 关系的条件,即 if is V01NA V02is NA ,然后使foo该行的 var(已存在但没有 NA)为 NA。

这是一个小问题来说明:

tbl <- tibble(
  V01 = 10:15,
  V02 = 1:6,
  V03 = V02 * 2,
  foo = V03 * 2
)
# sprinkle around some NAs
tbl[1,2] = NA
tbl[4,1] = NA
tbl[4,2] = NA
tbl[6,1:3] = NA
Run Code Online (Sandbox Code Playgroud)

产生这个表:

# A tibble: 6 x 4
    V01   V02   V03   foo
  <int> <int> <dbl> <dbl>
1    10    NA     2     4
2    11     2     4 …
Run Code Online (Sandbox Code Playgroud)

r na dplyr tidyverse

5
推荐指数
1
解决办法
1843
查看次数

是否可以使用包含字符向量(字符串)的变量来命名 tibble 的列?

有没有办法使用变量来命名 tibble 的列?Clade例如,我想命名下面的第一列。我尝试过paste()assign(),但这两个功能似乎都没有达到我想要的效果。

CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"

  metaDF = tibble(CLADE_FIELD = c("G"), 
                       LINEAGE_FIELD = c("B.666"), 
                       "Submission date" = c("2020-03"))
Run Code Online (Sandbox Code Playgroud)

我在单元测试中使用此代码,这就是我人为创建此 tibble 的原因。该名称引用了 csv 中的列名称,如果该列名称发生更改,我希望代码能够轻松维护。

r dataframe tibble

5
推荐指数
1
解决办法
2415
查看次数

使用以倒数第二个值作为 .init 参数的累加函数

我最近遇到了一个有趣的问题,即使用倒数第二个值作为.init参数加上附加向量的当前值来计算向量值。这是示例数据集:

set.seed(13)
dt <- data.frame(id = rep(letters[1:2], each = 5), time = rep(1:5, 2), ret = rnorm(10)/100)
dt$ind <- if_else(dt$time == 1, 120, if_else(dt$time == 2, 125, as.numeric(NA)))

   id time          ret ind
1   a    1  0.005543269 120
2   a    2 -0.002802719 125
3   a    3  0.017751634  NA
4   a    4  0.001873201  NA
5   a    5  0.011425261  NA
6   b    1  0.004155261 120
7   b    2  0.012295066 125
8   b    3  0.002366797  NA
9   b    4 -0.003653828  NA
10 …
Run Code Online (Sandbox Code Playgroud)

r accumulate rolling-computation purrr

5
推荐指数
1
解决办法
130
查看次数