通过在附加列中添加详细信息来标识R中包含完整数据的行



对于示例数据框架:

df1 <- structure(list(id = structure(1:5, .Label = c("a", "b", "c", 
"d", "e"), class = "factor"), cat = c(5L, 7L, 6L, 2L, 8L), dog = c(7L, 
NA, 6L, 13L, 2L), sheep = c(NA, 6L, 3L, 6L, 2L), cow = c(2L, 
10L, 8L, 9L, 1L), rabbit = c(5L, 3L, NA, 2L, 4L), pig = c(7L, 
NA, 12L, 5L, NA)), .Names = c("id", "cat", "dog", "sheep", "cow", 
"rabbit", "pig"), class = "data.frame", row.names = c(NA, -5L
))

我想添加一个额外的列'complete。farm’来识别哪些行在"羊"、"牛"one_answers"猪"列中有值。任何在一个或中有NAs的行这些列中有更多的列应该得到0,有实际值的行应该得到1。

如果有人能给我一些建议,我将非常感激。我通常使用完整的案例来子集我的数据框架,但这一次,我只想在列中添加这些信息。

这似乎可以工作:

> df1$complete.farm <- ifelse( !is.na(df1$pig) & !is.na(df1$sheep) & !is.na(df1$cow), 1,0)
> df1
  id cat dog sheep cow rabbit pig complete.farm
1  a   5   7    NA   2      5   7             0
2  b   7  NA     6  10      3  NA             0
3  c   6   6     3   8     NA  12             1
4  d   2  13     6   9      2   5             1
5  e   8   2     2   1      4  NA             0

ifelse是矢量化的,所以你只提到第一个参数的条件,1是确认的,0是未确认的。

另一种(更简单的)方式是@thelatemail下面的评论:

df1$col <- as.numeric(complete.cases(df1[c("sheep","cow","pig")]))
> df1
  id cat dog sheep cow rabbit pig complete.farm col
1  a   5   7    NA   2      5   7             0   0
2  b   7  NA     6  10      3  NA             0   0
3  c   6   6     3   8     NA  12             1   1
4  d   2  13     6   9      2   5             1   1
5  e   8   2     2   1      4  NA             0   0

最新更新