有条件地复制行时出错-R
我有一个a、B、C列的数据框,如下所示:有条件地复制行时出错-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 <- 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 Tryrbind(df,df[!is.na(df$C),])
我不再有错误代码,但我看不到数据帧有任何更改。Tryrbind(df,df[!is.na(df$C),])
我不再有错误代码,但我也看不到数据帧有任何更改