如何在不指定列名的情况下将行添加到特定位置(索引)的小标题? (右)
How to add rows to a tibble at a specific place (index) without specifying column names? (R)
我有很多专栏。我需要在特定位置向它添加一行(例如,在第 2 行之前)。如果不在值前键入列名,我该如何做到这一点?
例如这是我必须做的(想象更多列,V1、V2、V3,...):
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl1 %>% add_row(V1=1.5, V2=2.5, .before = 2)
这是我希望我能做的(returns 错误,因为未指定列名):
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl1 %>% add_row(c(1.5,3.5), .before = 2)
我可以根据第一个小标题创建另一个小标题,然后使用 bind_rows
将其附加到旧小标题,但将其添加到末尾,即我无法在第 2 行之前指定位置:
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl2 = tbl1 %>% summarise_all(mean)
bind_rows(tbl1, tbl2)
(目标是在tbl1中的两个值之间进行插值。)方法必须是高效的,即不能复制tbl1。
这里有一个选项setNames
library(tibble)
tbl1 %>%
add_row(!!! setNames(list(1.5, 3.5), names(.)), .before = 2)
-输出
# A tibble: 3 x 2
# V1 V2
# <dbl> <dbl>
#1 1 3
#2 1.5 3.5
#3 2 4
加上 purrr
,您可以:
map2_dfc(.x = c(1.5, 2.5),
.y = names(tbl1),
~ tbl1 %>%
select(.y) %>%
add_row(!!.y := .x, .before = 2))
V1 V2
<dbl> <dbl>
1 1 3
2 1.5 2.5
3 2 4
在 base R 中,您可以通过以下操作在任意位置添加一行:
#get mean of all columns
vals <- colMeans(tbl1)
#Assign position where you want to add the new row
before <- 2
#Create row index for the new dataframe
inds <- sort(c(seq(nrow(tbl1)), before))
#Add last row at before position
inds[before] <- length(inds)
#combine the two output and arrange them based on `inds`
result <- rbind(tbl1, vals)[inds, ]
result
# V1 V2
# <dbl> <dbl>
#1 1 3
#2 1.5 3.5
#3 2 4
我有很多专栏。我需要在特定位置向它添加一行(例如,在第 2 行之前)。如果不在值前键入列名,我该如何做到这一点?
例如这是我必须做的(想象更多列,V1、V2、V3,...):
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl1 %>% add_row(V1=1.5, V2=2.5, .before = 2)
这是我希望我能做的(returns 错误,因为未指定列名):
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl1 %>% add_row(c(1.5,3.5), .before = 2)
我可以根据第一个小标题创建另一个小标题,然后使用 bind_rows
将其附加到旧小标题,但将其添加到末尾,即我无法在第 2 行之前指定位置:
library(tidyverse)
tbl1 = tibble(V1=c(1,2), V2=c(3,4))
tbl2 = tbl1 %>% summarise_all(mean)
bind_rows(tbl1, tbl2)
(目标是在tbl1中的两个值之间进行插值。)方法必须是高效的,即不能复制tbl1。
这里有一个选项setNames
library(tibble)
tbl1 %>%
add_row(!!! setNames(list(1.5, 3.5), names(.)), .before = 2)
-输出
# A tibble: 3 x 2
# V1 V2
# <dbl> <dbl>
#1 1 3
#2 1.5 3.5
#3 2 4
加上 purrr
,您可以:
map2_dfc(.x = c(1.5, 2.5),
.y = names(tbl1),
~ tbl1 %>%
select(.y) %>%
add_row(!!.y := .x, .before = 2))
V1 V2
<dbl> <dbl>
1 1 3
2 1.5 2.5
3 2 4
在 base R 中,您可以通过以下操作在任意位置添加一行:
#get mean of all columns
vals <- colMeans(tbl1)
#Assign position where you want to add the new row
before <- 2
#Create row index for the new dataframe
inds <- sort(c(seq(nrow(tbl1)), before))
#Add last row at before position
inds[before] <- length(inds)
#combine the two output and arrange them based on `inds`
result <- rbind(tbl1, vals)[inds, ]
result
# V1 V2
# <dbl> <dbl>
#1 1 3
#2 1.5 3.5
#3 2 4