将子集列粘贴在一起

Imp*_*le9 4 r subset dataframe tidyr

我想将一些列与一些文本粘贴在一起,只有当至少有一个不是NA并且我当前的解决方案有效时才合并它们,但是很麻烦.所以我想知道是否有更简洁的方法来做到这一点(创建下面的"组合"栏).我想使用tidyr但是似乎没有办法在unite()中指定如何处理缺失值

谢谢,我希望我没有错过任何明显的东西.

df = data.frame(num=c(1,2,NA,NA),place=c("Rome",NA,"Paris",NA))

df$combine[!is.na(df$num)|!is.na(df$place)] = 
  paste(df$num[!is.na(df$num)|!is.na(df$place)],
        "days in",df$place[!is.na(df$num)|!is.na(df$place)]) 

# df
#   num place          combine
# 1   1  Rome   1 days in Rome
# 2   2  <NA>     2 days in NA
# 3  NA Paris NA days in Paris
# 4  NA  <NA>             <NA>
Run Code Online (Sandbox Code Playgroud)

tal*_*lat 6

每当您发现自己再次计算相同的事物(此处为:index)时,请尝试存储它并重用该对象以避免冗余计算.对于您的示例,您可以按如下方式计算非NA索引:

idx <- rowSums(!is.na(df)) > 0
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用它将相关行粘贴在一起:

df[idx, "combine"] <- with(df[idx, ], paste(num, "days in", place))
Run Code Online (Sandbox Code Playgroud)