有条件地复制行时出错-R

有条件地复制行时出错-R,r,R,我有一个a、B、C列的数据框,如下所示: A <- c("NX300", "BT400", "GD200") B <- c("M0102", "N0703", "M0405") C <- c(NA, "M0104", "N0404") df <- data.frame (A,B,C) 有人能帮忙吗?一个选项是 library(dplyr) df %>% mutate(i1 = 1 + !is.na(C)) %>% uncount(i1) %

我有一个a、B、C列的数据框,如下所示:

A <- c("NX300", "BT400", "GD200")
B <- c("M0102", "N0703", "M0405")
C <- c(NA, "M0104", "N0404")
df <- data.frame (A,B,C)

有人能帮忙吗?

一个选项是

library(dplyr)
df %>% 
   mutate(i1 = 1 + !is.na(C)) %>% 
   uncount(i1) %>% 
   mutate(B = replace(B, duplicated(B), NA)) %>% 
   group_by(A) %>%
   mutate(C = replace(C, duplicated(C, fromLast = TRUE), NA))
一个选择是

library(dplyr)
df %>% 
   mutate(i1 = 1 + !is.na(C)) %>% 
   uncount(i1) %>% 
   mutate(B = replace(B, duplicated(B), NA)) %>% 
   group_by(A) %>%
   mutate(C = replace(C, duplicated(C, fromLast = TRUE), NA))

定义一个函数
newrows
,该函数接受一行
x
,并返回该行或重复的行,然后将其应用于每一行。没有使用任何软件包

newrows <- function(x) {
  if (is.na(x$C)) x 
  else rbind(replace(x, "C", NA), replace(x, "B", NA))
}
do.call("rbind", by(df, 1:nrow(df), newrows))

newrows定义一个函数
newrows
,该函数接受一行
x
,并返回该行或重复的行,然后将其应用于每一行。没有使用任何软件包

newrows <- function(x) {
  if (is.na(x$C)) x 
  else rbind(replace(x, "C", NA), replace(x, "B", NA))
}
do.call("rbind", by(df, 1:nrow(df), newrows))

newrows如果排序不重要,继续您的第一步,您可以尝试:

x <- rbind(df, cbind(df[!is.na(df$C),1:2], C=NA))
x$B[!is.na(x$C)] <- NA

x
#       A     B     C
#1  NX300 M0102  <NA>
#2  BT400  <NA> M0104
#3  GD200  <NA> N0404
#21 BT400 N0703  <NA>
#31 GD200 M0405  <NA>

x如果排序不重要,继续您的第一步,您可以尝试:

x <- rbind(df, cbind(df[!is.na(df$C),1:2], C=NA))
x$B[!is.na(x$C)] <- NA

x
#       A     B     C
#1  NX300 M0102  <NA>
#2  BT400  <NA> M0104
#3  GD200  <NA> N0404
#21 BT400 N0703  <NA>
#31 GD200 M0405  <NA>

x Try
rbind(df,df[!is.na(df$C),])
我不再有错误代码,但我看不到数据帧有任何更改。Try
rbind(df,df[!is.na(df$C),])
我不再有错误代码,但我也看不到数据帧有任何更改