R 如何根据条件向数据框添加行
我有一个数据帧,我想在以下条件的基础上添加一行。条件是R 如何根据条件向数据框添加行,r,dataframe,rbind,R,Dataframe,Rbind,我有一个数据帧,我想在以下条件的基础上添加一行。条件是列a等于C且列b等于3或5 这是我的数据框 df使用tidyverse软件包的解决方案 library(tidyverse) df2 <- df %>% mutate(Group = lag(cumsum(a == "C" & b %in% c(3, 5)), default = FALSE)) %>% group_split(Group) %>% map_dfr(~ .x %>% bind
列a
等于C
且列b
等于3
或5
这是我的数据框
df使用tidyverse
软件包的解决方案
library(tidyverse)
df2 <- df %>%
mutate(Group = lag(cumsum(a == "C" & b %in% c(3, 5)), default = FALSE)) %>%
group_split(Group) %>%
map_dfr(~ .x %>% bind_rows(tibble(a = "add", b = 3))) %>%
slice(-n()) %>%
select(-Group)
df2
# # A tibble: 10 x 2
# a b
# <chr> <dbl>
# 1 A 1
# 2 B 2
# 3 C 3
# 4 add 3
# 5 D 4
# 6 C 5
# 7 add 3
# 8 A 6
# 9 C 7
# 10 E 8
库(tidyverse)
df2%
变异(组=滞后(累积和(a==“C”&b%in%C(3,5)),默认值=假))%>%
分组(分组)%>%
映射数据流(~.x%>%bind_行(tibble(a=“add”,b=3)))%>%
切片(-n())%>%
选择(-组)
df2
##A tible:10 x 2
#a b
#
#1 A 1
#2 B 2
#3 C 3
#4加3
#5天4
#6 C 5
#7加3
#8 A 6
#9 C 7
#10 E 8
在R底,我们可以找到a=“c”
和b
是3或5的位置。在dataframe中重复这些行,并用所需的值替换它们
pos <- which(df$a == "C" & df$b %in% c(3, 5))
df <- df[sort(c(seq(nrow(df)), pos)), ]
df[seq_along(pos) + pos, ] <- list("add", 3)
row.names(df) <- NULL
df
# a b
#1 A 1
#2 B 2
#3 C 3
#4 add 3
#5 D 4
#6 C 5
#7 add 3
#8 A 6
#9 C 7
#10 E 8
pos谢谢你,我投了赞成票。一旦我习惯使用baseR
,我就需要学习tidyverse
。
pos <- which(df$a == "C" & df$b %in% c(3, 5))
df <- df[sort(c(seq(nrow(df)), pos)), ]
df[seq_along(pos) + pos, ] <- list("add", 3)
row.names(df) <- NULL
df
# a b
#1 A 1
#2 B 2
#3 C 3
#4 add 3
#5 D 4
#6 C 5
#7 add 3
#8 A 6
#9 C 7
#10 E 8
df <- data.frame(a = c("A", "B", "C", "D", "C", "A", "C", "E"),
b = c(seq(8)), stringsAsFactors = FALSE)