我的数据框中有2列,因此对于每一行,以下任一行都为真: 1.只有一个有价值(另一个没有) 2.两者都有缺失值
如果两列都缺失,我需要创建一个缺失值的新列,如果只有一列有值,则需要创建非缺失值。
示例:A和B是我的数据集中的列,C是我需要创建的列:
A B C
1 NA 1
NA 6 6
NA NA NA
9 NA 9
4 NA 4
NA 3 3
此外,我希望将许多这样的列组合在一起,所以理想情况下我希望在一个函数的帮助下执行此操作,我可以传递新列,column1,column2和数据帧的名称。 / p>
我无法理解我该怎么做。任何人都可以指出我正确的方向。
(我搜索了重复的问题,但我发现的问题与非缺失值有关,所以我不得不发布这个类似的问题)
答案 0 :(得分:1)
怎么样:
fc <- function(data, column1, column2) {
data$res <- rowSums(data[,c(column1, column2)], na.rm=T)
data[,data$res==0] <- NA
return(data)
}
或者如果您的数据不是数字,您更喜欢@ r2evans解决方案:
fc <- function(data, column1, column2) {
data$res <- ifelse(is.na(data[,column1]), data[,column2], data[,column1])
return(data)
}
比你打电话:
df2 <- fc(df, "A", "B")
答案 1 :(得分:0)
另一种方法可能是
myFun <- function(df, col1, col2, new_col){
df[new_col] <- pmax(df[,col1], df[,col2], na.rm = TRUE)
return(df)
}
myFun(df, "A", "B", "C")
# A B C
#1 1 NA 1
#2 NA 6 6
#3 NA NA NA
#4 9 NA 9
#5 4 NA 4
#6 NA 3 3
#sample data
> dput(df)
structure(list(A = c(1L, NA, NA, 9L, 4L, NA), B = c(NA, 6L, NA,
NA, NA, 3L)), .Names = c("A", "B"), class = "data.frame", row.names = c(NA,
-6L))