崩溃行W/NA值
我试图瓦解行的数据帧,看起来像这样的a,b和c:崩溃行W/NA值
>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
任何和所有的帮助将不胜感激。
# 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)]
这个怎么样...
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)为第二个答案。这应该是标记答案恕我直言。使用'apply'和'rowSums'将它强制转换为这里没有必要的矩阵。 – Arun 2013-05-13 23:17:21
为第二个+1!我同意@Arun,这应该是标记的。 – 2013-05-13 23:40:56
谢谢。我猜测它的有用性取决于样本数据是否是真实的全部数据反映(即如果*总是*只有1个值)。 – 2013-05-13 23:45:02
另一个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)
我没有意识到'by'可能会排成行。很酷的东西! – Frank 2013-05-13 23:16:59