Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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中相邻列中的值替换NA_R_Vector_Replace_Atomic_Na - Fatal编程技术网

用R中相邻列中的值替换NA

用R中相邻列中的值替换NA,r,vector,replace,atomic,na,R,Vector,Replace,Atomic,Na,必要时,我想将IMIAVG列中的NA替换为同一行中IMILefit或IMIRIGHT列中的值(即第1、6、7行)。我试过很多方法,但似乎都不管用。这需要一个循环吗?请注意,错误总是伴随着原子向量出现。谢谢 IMILEFT IMIRIGHT IMIAVG NA 71.15127 NA 72.18310 72.86607 72.52458 70.61460 68.00766 69.3

必要时,我想将IMIAVG列中的NA替换为同一行中IMILefit或IMIRIGHT列中的值(即第1、6、7行)。我试过很多方法,但似乎都不管用。这需要一个循环吗?请注意,错误总是伴随着原子向量出现。谢谢

  IMILEFT       IMIRIGHT       IMIAVG
  NA            71.15127         NA
  72.18310      72.86607      72.52458
  70.61460      68.00766      69.31113
  69.39032      69.91261      69.65146
  72.58609      72.75168      72.66888
  70.85714         NA            NA
  NA            69.88203         NA
  74.47109      73.07963      73.77536
  70.44855      71.28647      70.86751
  NA            72.33503         NA
  69.82818      70.45144      70.13981
  68.66929      69.79866      69.23397
  72.46879      71.50685      71.98782
  71.11888      71.98336      71.55112
  NA            67.86667         NA

如果在
IMILEFT
imright
之间只有一个值不是
NA
(如您的示例所示),只需尝试(
df
是您的数据帧):

从根本上解决问题

数据

df<-structure(list(IMILEFT = c(NA, 72.1831, 70.6146, 69.39032, 72.58609, 
70.85714, NA, 74.47109, 70.44855, NA, 69.82818, 68.66929, 72.46879, 
71.11888, NA), IMIRIGHT = c(71.15127, 72.86607, 68.00766, 69.91261, 
72.75168, NA, 69.88203, 73.07963, 71.28647, 72.33503, 70.45144, 
69.79866, 71.50685, 71.98336, 67.86667), IMIAVG = c(NA, 72.52458, 
69.31113, 69.65146, 72.66888, NA, NA, 73.77536, 70.86751, NA, 
70.13981, 69.23397, 71.98782, 71.55112, NA)), .Names = c("IMILEFT", 
"IMIRIGHT", "IMIAVG"), class = "data.frame", row.names = c(NA, 
-15L))
df
df%
变异(
IMIAVG=ifelse(
is.na(IMIAVG),
ifelse(is.na(IMIRIGHT)、imilft、IMIRIGHT),
IMIAVG
)
)

您也可以使用
pmax

indx <- is.na(df$IMIAVG)
df$IMIAVG[indx] <- do.call(pmax, c(df[indx, 1:2], na.rm=TRUE))

你好,谢谢@nicola。因此,只有在左列中有值时,才会更改NA。关于如何对右列执行此操作,您有什么想法吗?没有,这应该会更改
IMIAVG
列,该列的值在
IMILEFT
IMIRIGHT
之间不是
NA
。它适用于样本数据,可能您的数据有点不同。谢谢@尼古拉!!!!!这意味着完全成功了!!!!!好几天来我一直想得到这个!非常感谢。
df<-structure(list(IMILEFT = c(NA, 72.1831, 70.6146, 69.39032, 72.58609, 
70.85714, NA, 74.47109, 70.44855, NA, 69.82818, 68.66929, 72.46879, 
71.11888, NA), IMIRIGHT = c(71.15127, 72.86607, 68.00766, 69.91261, 
72.75168, NA, 69.88203, 73.07963, 71.28647, 72.33503, 70.45144, 
69.79866, 71.50685, 71.98336, 67.86667), IMIAVG = c(NA, 72.52458, 
69.31113, 69.65146, 72.66888, NA, NA, 73.77536, 70.86751, NA, 
70.13981, 69.23397, 71.98782, 71.55112, NA)), .Names = c("IMILEFT", 
"IMIRIGHT", "IMIAVG"), class = "data.frame", row.names = c(NA, 
-15L))
df <- read.table(text = "IMILEFT       IMIRIGHT       IMIAVG
  NA            71.15127         NA
  72.18310      72.86607      72.52458
  70.61460      68.00766      69.31113
  69.39032      69.91261      69.65146
  72.58609      72.75168      72.66888
  70.85714         NA            NA
  NA            69.88203         NA
  74.47109      73.07963      73.77536
  70.44855      71.28647      70.86751
  NA            72.33503         NA
  69.82818      70.45144      70.13981
  68.66929      69.79866      69.23397
  72.46879      71.50685      71.98782
  71.11888      71.98336      71.55112
  NA            67.86667         NA" , header = T)

library("dplyr")

    df %>%
  mutate(
    IMIAVG = ifelse(
                      is.na(IMIAVG) , 
                      ifelse(is.na(IMIRIGHT) ,IMILEFT ,IMIRIGHT  ) , 
                      IMIAVG
                   )
         )
indx <- is.na(df$IMIAVG)
df$IMIAVG[indx] <- do.call(pmax, c(df[indx, 1:2], na.rm=TRUE))
library(data.table) 
setDT(df)[is.na(IMIAVG), IMIAVG:=pmax(IMILEFT, IMIRIGHT, na.rm=TRUE)]