如何解决如何在不指定列名的情况下将行添加到特定位置索引的小标题? (右)
我有一个包含很多列的小标题。我需要在特定位置添加一行(例如在第 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)
这就是我希望我能做的(返回错误,因为未指定列名):
library(tidyverse)
tbl1 = tibble(V1=c(1,4))
tbl1 %>% add_row(c(1.5,3.5),.before = 2)
我可以基于第一个创建另一个 tibble 并使用 bind_rows
将其附加到旧的一个,但是在最后添加它,即我无法在第 2 行之前指定位置:
library(tidyverse)
tbl1 = tibble(V1=c(1,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
,
在基数 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。