我有一個數據幀,它看起來像如下:更換NA的和刪除列以高效的方式
# Code:
m3 <- c(NA, -3, NA, NA, -3)
m2 <- c(rep(NA, 5))
m1 <- c(rep(NA, 5))
Zero <- c(rep(NA, 5))
p1 <- c(1, NA, NA, 1, NA)
p2 <- c(NA, NA, NA, 2, NA)
p3 <- c(3, NA, 3, 3, NA)
df <- data.frame(m3, m2, m1, Zero, p1, p2, p3)
# Output:
m3 m2 m1 Zero p1 p2 p3
1 NA NA NA NA 1 NA 3
2 -3 NA NA NA NA NA NA
3 NA NA NA NA NA NA 3
4 NA NA NA NA 1 2 3
5 -3 NA NA NA NA NA NA
我需要插入-3整行中,如果有一個-3的第一列。我還需要刪除所有列,但是p1,p2和p3。最終結果應如下所示:
# Final output:
p1 p2 p3
1 1 NA 3
2 -3 -3 -3
3 NA NA 3
4 1 2 3
5 -3 -3 -3
我找到了一個解決方案,但對我來說似乎效率很低。我需要多次執行此操作,因此需要一個儘可能高效的代碼。我的低效解決方案如下所示:
# Inefficient code:
for(i in 1:length(df$m3)){
if(is.na(df$m3[i]) == FALSE){
df[i, ] <- -3
}
}
df <- df[ , 5:length(df)]
有沒有更高效的方法?非常感謝您提前!
這是一個'dplyr'版本的IE'庫(dplyr); df%>%mutate_each(funs(replace(。,which(m3 == - 3),-3)),starts_with('p'))%>%select(p1:p3)' – akrun