我有 pandas DataFrameA。我正在努力将其转换为我想要的格式,请参阅DataFrameB。我尝试过pivot或melt但我不确定如何使其成为有条件的(string值 to FIELD_STR_VALUE,numeric值 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) 数据框包含两个变量 ( 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)
如何在基础 R或dplyr?
我有一个非常简单的 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) 我有一个如下所示的数据框:
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有关:使用上一行新生成的数据
我意识到我面临的实际问题比我在上面线程中给出的示例要复杂一些 - 似乎我必须将 3 个参数传递给递归计算才能实现我想要的。因此,accumulate2 或reduce可能不起作用。所以我在这里提出一个新问题以避免可能的混淆。
我有以下按 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) mtcars作为例子使用。我想编写一个创建函数count和pct列,如下面-
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列。
我有一个列表,其元素是整数,如果这些元素至少共享一个值,我想累积这些元素。对于那些与其他元素不共享任何价值观的元素,我希望它们保持原样。这是我的样品日期:
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)
我想先用reduce或accumulate函数来做,purrr但tidyverse欢迎任何其他解决方案。到目前为止,我已经尝试过这个解决方案,但它只给了我一个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) 与常见值(如某种聚类)进行分组的方法,但不幸的是,到目前为止,我的努力都是徒劳的。
非常感谢您提前提供帮助。
这个问题很难用标题行来表达,但它与通常的“如何根据另一列中的值更改一列中的值”不同。有两个问题我在其他地方没有看到处理过: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) 有没有办法使用变量来命名 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 中的列名称,如果该列名称发生更改,我希望代码能够轻松维护。
我最近遇到了一个有趣的问题,即使用倒数第二个值作为.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)