如何根据管道中的行号选择列中的值
How to pick a value in a column based on row number within a pipeline
这个问题更多的是帮助我为我的代码构建一个高效的管道。
数据
df <- data.frame(stringsAsFactors=FALSE,
Date = c("2015-10-26", "2015-10-26", "2015-10-26", "2015-10-26",
"2015-10-27", "2015-10-27", "2015-10-27"),
Ticker = c("ANZ", "CBA", "NAB", "WBC", "ANZ", "CBA", "WBC"),
Open = c(29.11, 77.89, 32.69, 31.87, 29.05, 77.61, 31.84),
High = c(29.17, 77.93, 32.76, 31.92, 29.08, 78.1, 31.95),
Low = c(28.89, 77.37, 32.42, 31.71, 28.9, 77.54, 31.65),
Close = c(28.9, 77.5, 32.42, 31.84, 28.94, 77.74, 31.77),
Volume = c(6350170L, 2251288L, 3804239L, 5597684L, 5925519L, 2424679L,
5448863L)
)
这就是我希望我的工作流程的样子
df %>%
mutate(new column = some_function(Open, 1)) # "Open" is column name, "1" is for row no.
应该输出以下内容:
Date Ticker Open High Low Close Volume new_column
1 2015-10-26 ANZ 29.11 29.17 28.89 28.90 6350170 29.11
2 2015-10-26 CBA 77.89 77.93 77.37 77.50 2251288 29.11
3 2015-10-26 NAB 32.69 32.76 32.42 32.42 3804239 29.11
4 2015-10-26 WBC 31.87 31.92 31.71 31.84 5597684 29.11
5 2015-10-27 ANZ 29.05 29.08 28.90 28.94 5925519 29.11
6 2015-10-27 CBA 77.61 78.10 77.54 77.74 2424679 29.11
7 2015-10-27 WBC 31.84 31.95 31.65 31.77 5448863 29.11
想知道 some_function
在 tidyverse
中是什么
寻找head
?
df %>%
mutate(newcolumn = head(Open, 1))
另一种选择是仅使用 first
函数本身。如果 OP 正在从 dplyr
中寻找可以从一行中提供值的函数,那么该函数应该是 nth
.
df %>%
mutate(newcolumn = first(Open))
OR 来自特定行的值
df %>%
mutate(newcolumn = nth(Open, 5))
nth
是一个 dplyr
函数。
我认为 OP 想要指定 any 行号,而不仅仅是第一个元素。但是您可以使用标准 [
子集运算符简单地执行此操作:
df <- data.frame(stringsAsFactors=FALSE,
Date = c("2015-10-26", "2015-10-26", "2015-10-26", "2015-10-26",
"2015-10-27", "2015-10-27", "2015-10-27"),
Ticker = c("ANZ", "CBA", "NAB", "WBC", "ANZ", "CBA", "WBC"),
Open = c(29.11, 77.89, 32.69, 31.87, 29.05, 77.61, 31.84),
High = c(29.17, 77.93, 32.76, 31.92, 29.08, 78.1, 31.95),
Low = c(28.89, 77.37, 32.42, 31.71, 28.9, 77.54, 31.65),
Close = c(28.9, 77.5, 32.42, 31.84, 28.94, 77.74, 31.77),
Volume = c(6350170L, 2251288L, 3804239L, 5597684L, 5925519L, 2424679L,
5448863L)
)
library(dplyr)
df %>%
mutate(new_column = Open[5])
#> Date Ticker Open High Low Close Volume new_column
#> 1 2015-10-26 ANZ 29.11 29.17 28.89 28.90 6350170 29.05
#> 2 2015-10-26 CBA 77.89 77.93 77.37 77.50 2251288 29.05
#> 3 2015-10-26 NAB 32.69 32.76 32.42 32.42 3804239 29.05
#> 4 2015-10-26 WBC 31.87 31.92 31.71 31.84 5597684 29.05
#> 5 2015-10-27 ANZ 29.05 29.08 28.90 28.94 5925519 29.05
#> 6 2015-10-27 CBA 77.61 78.10 77.54 77.74 2424679 29.05
#> 7 2015-10-27 WBC 31.84 31.95 31.65 31.77 5448863 29.05
由 reprex package (v0.2.0) 创建于 2018-03-16。
这个问题更多的是帮助我为我的代码构建一个高效的管道。
数据
df <- data.frame(stringsAsFactors=FALSE,
Date = c("2015-10-26", "2015-10-26", "2015-10-26", "2015-10-26",
"2015-10-27", "2015-10-27", "2015-10-27"),
Ticker = c("ANZ", "CBA", "NAB", "WBC", "ANZ", "CBA", "WBC"),
Open = c(29.11, 77.89, 32.69, 31.87, 29.05, 77.61, 31.84),
High = c(29.17, 77.93, 32.76, 31.92, 29.08, 78.1, 31.95),
Low = c(28.89, 77.37, 32.42, 31.71, 28.9, 77.54, 31.65),
Close = c(28.9, 77.5, 32.42, 31.84, 28.94, 77.74, 31.77),
Volume = c(6350170L, 2251288L, 3804239L, 5597684L, 5925519L, 2424679L,
5448863L)
)
这就是我希望我的工作流程的样子
df %>%
mutate(new column = some_function(Open, 1)) # "Open" is column name, "1" is for row no.
应该输出以下内容:
Date Ticker Open High Low Close Volume new_column
1 2015-10-26 ANZ 29.11 29.17 28.89 28.90 6350170 29.11
2 2015-10-26 CBA 77.89 77.93 77.37 77.50 2251288 29.11
3 2015-10-26 NAB 32.69 32.76 32.42 32.42 3804239 29.11
4 2015-10-26 WBC 31.87 31.92 31.71 31.84 5597684 29.11
5 2015-10-27 ANZ 29.05 29.08 28.90 28.94 5925519 29.11
6 2015-10-27 CBA 77.61 78.10 77.54 77.74 2424679 29.11
7 2015-10-27 WBC 31.84 31.95 31.65 31.77 5448863 29.11
想知道 some_function
在 tidyverse
寻找head
?
df %>%
mutate(newcolumn = head(Open, 1))
另一种选择是仅使用 first
函数本身。如果 OP 正在从 dplyr
中寻找可以从一行中提供值的函数,那么该函数应该是 nth
.
df %>%
mutate(newcolumn = first(Open))
OR 来自特定行的值
df %>%
mutate(newcolumn = nth(Open, 5))
nth
是一个 dplyr
函数。
我认为 OP 想要指定 any 行号,而不仅仅是第一个元素。但是您可以使用标准 [
子集运算符简单地执行此操作:
df <- data.frame(stringsAsFactors=FALSE,
Date = c("2015-10-26", "2015-10-26", "2015-10-26", "2015-10-26",
"2015-10-27", "2015-10-27", "2015-10-27"),
Ticker = c("ANZ", "CBA", "NAB", "WBC", "ANZ", "CBA", "WBC"),
Open = c(29.11, 77.89, 32.69, 31.87, 29.05, 77.61, 31.84),
High = c(29.17, 77.93, 32.76, 31.92, 29.08, 78.1, 31.95),
Low = c(28.89, 77.37, 32.42, 31.71, 28.9, 77.54, 31.65),
Close = c(28.9, 77.5, 32.42, 31.84, 28.94, 77.74, 31.77),
Volume = c(6350170L, 2251288L, 3804239L, 5597684L, 5925519L, 2424679L,
5448863L)
)
library(dplyr)
df %>%
mutate(new_column = Open[5])
#> Date Ticker Open High Low Close Volume new_column
#> 1 2015-10-26 ANZ 29.11 29.17 28.89 28.90 6350170 29.05
#> 2 2015-10-26 CBA 77.89 77.93 77.37 77.50 2251288 29.05
#> 3 2015-10-26 NAB 32.69 32.76 32.42 32.42 3804239 29.05
#> 4 2015-10-26 WBC 31.87 31.92 31.71 31.84 5597684 29.05
#> 5 2015-10-27 ANZ 29.05 29.08 28.90 28.94 5925519 29.05
#> 6 2015-10-27 CBA 77.61 78.10 77.54 77.74 2424679 29.05
#> 7 2015-10-27 WBC 31.84 31.95 31.65 31.77 5448863 29.05
由 reprex package (v0.2.0) 创建于 2018-03-16。