循环以合并具有非重叠NA的列中的数据

时间:2019-04-30 15:31:52

标签: r dataframe for-loop

我有一个NBA比赛数据库。为了使数据库整洁,我尝试使用两列(team1,team2)并将它们合并为一列。由于数据的性质,这两列中只有一个字符数据。因此,将它们合并在一起不会损害数据完整性。

我仍然掌握函数的功能,所以这是我尝试的无效的方法:

for(i in nrow(NBA_Clutch$Washington[i])) { 
  if is.na(NBA_Clutch$Washington[i] == FALSE) { 
    print(NBA_Clutch$Washington[i]) 
  } else { 
    print(NBA_Clutch$Cleveland[i]) 
  } 
}

3 个答案:

答案 0 :(得分:2)

您不需要for循环。您可以使用dplyr::coalesce

NBA_Clutch %>% mutate(WA_CL= coalesce(Washington, Cleveland))

或在base中:

NBA_Clutch$WA_CL <- na.omit(unlist(NBA_Clutch[,c("Washington", "Cleveland")]))

答案 1 :(得分:1)

使用ifelse函数:

NBA_Clutch$newColumn = ifelse( !is.na(NBA_Clutch$Washington, 
                               NBA_Clutch$Washington, 
                               NBA_Clutch$Cleveland) 

ifelse函数适用于矢量,其用法如下: ifelse( condition, true case, false case)

如果要使用for循环,请进行以下更改:

for(i in 1:nrow(NBA_Clutch)) { 

答案 2 :(得分:-1)

R中的此类工作完全不需要for循环。在这种情况下,您可以整体使用该列:

NBA_Clutch$newcolumn <- NBA_Clutch$Washington
NBA_Clutch$newcolumn[is.na(NBA_Clutch$newcolumn)] <- NBA_Clutch$Cleveland[is.na(NBA_Clutch$newcolumn)]

如果您仍然想使用for循环,我们可以做一些与您已有的类似的事情:

NBA_Clutch$newcolumn <- NBA_Clutch$Washington

for (i in 1:nrow(NBA_Clutch)) { 
  if (is.na(NBA_Clutch$Washington[i])) {
      NBA_Clutch$newcolumn[i] <- NBA_Clutch$Cleveland[i]
  } else { 
      NBA_Clutch$newcolumn[i] <- NBA_Clutch$Washington[i]
  } 
}