我正在尝试将数据框中的行a,b和c折叠起来,如下所示:
>df1 = data.frame(a=c(1,1,0,NA,NA,NA,NA,NA,NA),b=c(NA,NA,NA,0,1,1,NA,NA,NA),c=c(NA,NA,NA,NA,NA,NA,1,0,1))
a b c
1 1 NA NA
2 1 NA NA
3 0 NA NA
4 NA 0 NA
5 NA 1 NA
6 NA 1 NA
7 NA NA 1
8 NA NA 0
9 NA NA 1
进入第d行,创建一个如下所示的数据框:
a b c d
1 1 NA NA 1
2 1 NA NA 1
3 0 NA NA 0
4 NA 0 NA 0
5 NA 1 NA 1
6 NA 1 NA 1
7 NA NA 1 1
8 NA NA 0 0
9 NA NA 1 1
非常感谢任何和所有帮助。
答案 0 :(得分:4)
这个怎么样......
df1$d <- apply( df1 , 1 , max , na.rm=TRUE )
df1$d
# [1] 1 1 0 0 1 1 1 0 1
显然,这假设您在每一行中都有1
或0
。如果你有两者,它将始终选择1。
根据您发布的数据,这也有用:
df1[!is.na(df1)]
# [1] 1 1 0 0 1 1 1 0 1
答案 1 :(得分:4)
# using data.frame
df1$d <- apply(df1, 1, sum, na.rm=TRUE)
# using data.table
DT <- data.table(df1)
DT[, d := sum(.SD, na.rm=TRUE), by=1:nrow(DT)]
答案 2 :(得分:2)
另一个R基础解决方案是使用rowSums
> transform(df1, d=rowSums(df1, na.rm=TRUE))
a b c d
1 1 NA NA 1
2 1 NA NA 1
3 0 NA NA 0
4 NA 0 NA 0
5 NA 1 NA 1
6 NA 1 NA 1
7 NA NA 1 1
8 NA NA 0 0
9 NA NA 1 1
或直接df1$d <- rowSums(df1, na.rm=TRUE)