Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据条件向数据框添加行_R_Dataframe_Rbind - Fatal编程技术网

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)