将两列合并为R中的一列

时间:2018-07-17 13:58:43

标签: r function

V1<-c("Apple", "Orange", "NA", "NA")
V2<-c("NA", NA", "Strawberries", "NA")
V3<-data.frame(V1, V2)

想要获得以下信息:

V4<-c("Apple", "Orange", "Strawberries", "NA")
V4<-data.frame(V4)

有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:0)

V1<-c("Apple", "Orange", "NA", "NA")
V2<-c("NA", "NA", "Strawberries", "NA")
V3<-data.frame(V1, V2)


V3$V4 <- with(V3, ifelse(V1 == "NA" & V2 != "NA", as.character(V2), 
                         ifelse(V1 != "NA" & V2 == "NA", as.character(V1), "NA")))

这给出了:

      V1           V2           V4
1  Apple           NA        Apple
2 Orange           NA       Orange
3     NA Strawberries Strawberries
4     NA           NA           NA

答案 1 :(得分:0)

使用(*ArbitraryType)&buffer[0]的{​​{1}},也不要将字符串作为因素读取:

dplyr

答案 2 :(得分:0)

还可以使用dplyr中的coalesce。 我喜欢它,因为与嵌套的V1<-c("Apple", "Orange", NA, NA) V2<-c(NA, NA, "Strawberries", NA) V3 <-data.frame(V1, V2, stringsAsFactors = FALSE) library(dplyr) V3 %>% mutate(V4 = coalesce(V1, V2)) V1 V2 V4 1 Apple NA Apple 2 Orange <NA> Orange 3 <NA> Strawberries Strawberries 4 <NA> <NA> <NA> 子句相比,跟踪发生的事情要容易得多:

case_when

在这种情况下,差异可能不会太大,但是测试的条件越多,越容易获得。例如,如果您还需要处理两列中都存在非“ NA”值的情况,则可以将其简单地扩展为:

ifelse